投稿
WAITとVSYNCの違いが分かりません…
5そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
産まれた経緯は全然違うのですが、プチコンでは偶然、結果的にほとんど差がありません。 ちゃんと使い分けるとこういう風になります。 ・プログラムを一定時間止めたい時=WAIT ・ゲームのメインループを規則正しく回すための命令=VSYNC
1そうだね
プレイ済み
返信[2]
親投稿
すこし長いですがテストプログラムを作りました。けいさんの説明のほうが分かりやすいと思いますが、試してみてください。
1そうだね
プレイ済み
返信[3]
親投稿
ゆうたん yu-tan-sama
WAIT終了→1秒かかる処理→WAIT2秒 … トータルで3秒の待ち時間 VSYNC終了→1秒かかる処理→VSYNC2秒 … トータルで2秒の待ち時間 こんな感じかな~ 数え始める場所が違うので 間に入る処理時間が長いと違いが大きく出てきます
1そうだね
プレイ済み
返信[4]
親投稿
WAITとVSYNCは一度呼び出した後の処理の重さによって変わってきます。例えば、 1 WAIT 60(60フレームのウエイト) 2 重い処理(40フレームほどかかる) 3 WAIT 60(60フレームのウエイト) とした場合、3はきちんと60フレーム(約1秒ウエイトが入ります)これがVSYNCだと 1 VSYNC 60(60フレームのウエイト)※前回からの差がなかったとして 2 重い処理(40フレームほどかかる) 3 VSYNC 60(20フレームのウエイト) となり、3が20フレームのウエイトになります。これは前回(1)に呼び出されてから次に呼び出されるまで20フレーム消費しているので、3の時は残りの20フレームウエイトすれば合計60フレームになるので、そのように調整される感じです。 これがループだとVSYNC、一定時間きちんと止めるならWAITと言われる理由ですね。
2そうだね
プレイ済み
返信[5]
親投稿
ちょっと解説にミスがありました…。 「これは前回(1)に呼び出されてから次に呼び出されるまで40フレーム消費しているので、3の時は残りの20フレームウエイトすれば合計60フレームになる」 の間違いです。すいません…。 あと処理によっては一応微妙な誤差は出るかもしれませんので、そういうイメージ的に考えて、上記の用途によって使い分ける(ループのタイミング調整ならVSYNC、ウエイトならWAIT)といいと思います。
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
一見すると似たような命令ですが、すでに多くの方が書かれているようにタイミングを取るならばVSYNC、ウエイトならばWAITと覚えておくのが一番でしょう。 細かい動作の違いについて知りたいならば「VSYNCとWAITでタイミングを取れ」で検索すれば詳細な図解による解説があるので参考にしてみてください。
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
上記の解説を見ての通り、常時60fpsで動作しているプログラムの場合はWAITとVSYNCは全く同じ動作となります。
0そうだね
プレイ済み