コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
たらこ ◆PWy.X.JqENU2
2019/1/1 0:45
質問
3秒間ずつ音を鳴らして(beep) spofsで常時動かすって可能ですか?
タイトルのとおりです
waitしか思い付きませんでした
わかる方どうか知恵をください

コメント

アバター
だにえる 2019/1/1 1:02 ◆m76OCAQyrWGt
同時に複数の処理を行うのは
理論上どんなものでも可能(複雑なもの程コードが書き辛くなるけど)。

一通りの処理を「1フレーム毎に毎回呼び出される」前提で書くのが味噌。
アバター
たらこ 2019/1/1 1:41 ◆PWy.X.JqENU2
これ3秒じゃなくてバーって鳴っちゃうんですけど、
工夫したら出来ますか?
アバター
ブルー 2019/1/1 3:17 ◆F30iKws/Dqrq
うん。
アバター
たらこ 2019/1/1 7:58 ◆PWy.X.JqENU2
まだ3秒間ごとになりません…
どうすればいいんでしょうか?
アバター
たらこ 2019/1/1 8:08 ◆PWy.X.JqENU2
出来ました。
アバター
ツララ 2019/1/1 10:53 ◆ArUdBYOYME1V
だにエルさんもブルーさんもサンプルプログラムの例を書いてくれてるのに
たらこさんは出来たプログラムを書いてくれないの?
アバター
たんじぇ 2019/1/1 12:40 ◆WDmFkVwZ4yMl
大事なポイントは2つあって、

無限ループ(REPEAT〜UNTIL 0 か、WHILE 1〜WEND)の中でVSYNC (1/60秒待つ)を呼んで、1フレーム(1/60秒)ごと処理を行う作りにして、1秒に60回実行されるようにすることと

このループの処理は必ず実行されてしまうので、時間をカウントして、自分が実行したい処理は条件を決めて実行することです。


無限ループ中の条件は今回のように時間だけではなくて、ゲームを作る場合に、ボタン入力があればプレイヤーを動かしたり、敵が勝手に移動していて壁にぶつかったら方向を変えたり、いろんな条件で使えます。


ちなみに作り方になっちゃうけど、時間をカウントする変数はカウントするだけに使って、条件判定で計算したほうが複数の条件を書けるようになったりします。

REPEAT
 VSYNC
 CNT=CNT+1
 IF 0==(CNT MOD (3*60)) THEN BEEP 1
 IF 0==(CNT MOD (4*60)) THEN BEEP 2
UNTIL 0

作るものによっては時間をカウントする変数を更新するやりかたもあるので、まちがいというわけではなくて、目的によって作り方を変えることがあるということです。
アバター
たらこ 2019/1/1 21:03 ◆PWy.X.JqENU2
つららさん
そうですね
のせておきます
アバター
たらこ 2019/1/1 21:04 ◆PWy.X.JqENU2
したのほうに
vsyncとwend入れています
アバター
たらこ 2019/1/1 21:10 ◆PWy.X.JqENU2
カウントする変数の更新って何か具体的な例ありますか?
ちょっとイメージがわからないので、お願いします...
アバター
名無し 2019/1/2 18:44 ◆5NukO9kEJAOQ
しらんな。
アバター
たんじぇ 2019/1/2 18:44 ◆WDmFkVwZ4yMl
’カウントする変数を更新するパターン
REPEAT
 VSYNC
 CNT=(CNT+1) MOD (3*60)
 IF CNT==0 THEN BEEP
UNTIL 0

'カウントする変数は更新せずに、判定のときに計算するパターン
REPEAT
 VSYNC
 CNT=CNT+1
 IF 0==(CNT MOD (3*60)) THEN BEEP
UNTIL 0

1つめのは CNT がBEEPを鳴らすために 0 に更新されるけど、
2つめのは CNT がBEEPを鳴らすために 0 に更新されずに、ずっと増え続けて行くので、他の処理をしたりするときにまた CNT を使えます。

どちらが間違ってると言うことはないけど、イメージはこんな感じです。
アバター
たらこ 2019/1/3 0:21 ◆PWy.X.JqENU2
1つめはcut=181になったら余りは1になるから更新されていて、
2つめは判定するときだけに計算しているから、
更新されないということですよね
アバター
たんじぇ 2019/1/3 13:25 ◆WDmFkVwZ4yMl
そんなかんじです。

正しくは、CNTが179でVSYNCに到達したときに (CNT+1)が180になって、(CNT+1) MOD (3*60) の結果が 0 になって CNT に 0 が入ります。

MOD で割り算のあまりを求める場合、MOD に指定した値(今回は3*60なので180) になることはないのです。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -