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

アバター
初心者 ◆ULvuffpmw1rp
2018/7/14 21:21
質問
WAIT VSYNCの違い
4年くらいしていて、未だに違いが分かりません/(^o^)\
要はVSYNC 30 +VSYNC 30 =30
WAIT 30. +WAIT 30. =60
VSYNC 30. +VSYNC 40=40
て事ですか?
優しい方教えて下さいm(_ _)m

コメント

アバター
はる 2018/7/14 21:25 ◆75Vh4SY8TdKS
そうです。
アバター
突然でてきたBAKA!! 2018/7/14 22:21 ◆EfKewrRlmOns
そうです(便乗)
まあ、簡単に言うと
VSYNCはフレームを完全ではないが、指定数、停止します。例として
WHILE 1
STICK OUT DX,DY
X=X+DX*4
Y=Y-DY*4
? X:? Y
SPOFS 0,X,Y
とやってみてください、するとキャラが瞬間移動します。
ですが、VSYNCは完全停止ではないのでVSYNC、VSYNC 1とうっとけば正常に動きます
WAITは完全停止でいろいろ複雑なところに入れると大変なことに....
アバター
初心者 2018/7/14 22:23 ◆ULvuffpmw1rp
そうでしたか。ありがとうございます。
では、
VSYNCで30フレームずつ停止させようとしたら、30 60 90 120 となっていくんですか?
そしたらWAITだけでいいと思ってしまいます。
どの様に有効活用すればいいのか教えて下さい!m(_ _)m
アバター
初心者 2018/7/14 22:30 ◆ULvuffpmw1rp
すいません!完全停止は何となくわかるんですけど、完全停止ではないとしたら、プログラム上ではどんな動きをしているんですか?
アバター
突然でてきたBAKA!! 2018/7/14 22:41 ◆EfKewrRlmOns
VSYNC:停止させるフレーム"間隔"。1フレームは1/60秒。前回のVSYNCコマンド実行時から指定時間が経過するまで停止します。
主に「画面の再描画待ち」に使用します。

例えば十時キーでキャラを移動させるプログラムの場合、内部的に座標が1ずつ動いていたとしても、
画面が描画されるまでに計算処理だけを高速に繰り返せば、画面上のキャラはいきなりワープしたようになってしまいます
そのようにならないよう、最低でも1フレーム(画面再描写1回分)はプログラムを停止して待つ必要があります。
しかしここで「WAIT」を使うと、ループ処理時間1回分+WAITのフレーム分が停止する事になり、待ち時間が不安定になります。
「VSYNC」を使えば前回のVSYNCからの経過時間停止するので、毎回同じタイミングでプログラムが動きます。
※ループ処理1回に1フレーム以上の時間がかかると遅くなりますが、3DS+SmileBASICの性能上、通常はめったに起こりません。
WAIT:停止させるフレーム"数"。1フレームは1/60秒。省略時は1(1/60秒)WAITコマンド実行のあとに指定フレーム分停止します。
例えば「『ゲームオーバー』と表示させてBGMを流しながら、6秒間はボタンを受け付けない」という場合などに使用します。(サンプルコード参照)
1フレームは1/60秒、60フレームで1秒間停止します。
間隔と数ですねw
アバター
初心者 2018/7/14 22:53 ◆ULvuffpmw1rp
なるほど!VSYNCは間隔だったんてすね!今までWAITしか使ってこなかったので何だかスッキリしました!本当にありがとうございました!
アバター
GRS 2018/7/14 22:58 ◆D.CKYslrId2w
VSYNCとWAITの違い
アバター
初心者 2018/7/14 22:59 ◆ULvuffpmw1rp
@A
?1
VSYNC 60
GOTO@A
で実行すると2つ1が表示されるんですけど、どうしてですか?
アバター
初心者 2018/7/14 23:05 ◆ULvuffpmw1rp
GRSさん、わざわざありがとうございます!しっかりと見させてもらいます!
アバター
初心者 2018/7/14 23:12 ◆ULvuffpmw1rp
おおー!最初のVSYNCは機能しないんですね!
アバター
初心者 2018/7/14 23:28 ◆ULvuffpmw1rp
これで30フレーム停止すると思っていたんですが、これだと60フレーム停止してしまいました。例えば30フレーム間隔にするためにはどうすればいいんですか?
アバター
でんぺん 2018/7/14 23:39 ◆HfSy5ayxtyTa
WAIT命令はVSYNCのリセットも兼ねてるのでWAIT30が終わった後からしっかりVSYNCで30止まってしまうので、その合計の60フレーム停止してしまう感じですね。
ちなみにこのループ(@Aから)自体はVSYNCが1つあるので61フレーム間隔で回ってますけどね。

WAIT 30のところを例えばLINPUT A$などにしてループの間隔を調整出来るようにすればVSYNC 30より早くボタンを押せばVSYNCからLINPUTで止まっていた時間の残りの時間だけ止まるような動作になります。
アバター
突然でてきたBAKA!! 2018/7/15 6:19 ◆EfKewrRlmOns
初心者さん、がんばです!!
アバター
初心者 2018/7/15 6:39 ◆ULvuffpmw1rp
WAITでリセット出来るんですね!でんぺんさんありがとうございます。試してみますね!BAKAさんも色々教えて下さりありがとうございます!
アバター
突然でてきたBAKA!! 2018/7/15 6:46 ◆EfKewrRlmOns
人とは、何かを求め何かのために力をだせ初心者だろうとどこかが最初から特化している
    by BAKA
アバター
初心者 2018/7/15 7:13 ◆ULvuffpmw1rp
しっかりと理解出来ました!
皆様本当にありがとうございました!

BAKAさんカッコイイ言葉ですねw
頑張ります!

コメントを書く

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

- WEB PATIO -