ページ 11

画面のかくつきについて

Posted: 2009年1月10日(土) 16:07
by kouki
はじめまして。
シューティングゲームの館に書いてあるとおりに、ゲームを製作しているのですが、
シューティングゲームの館の最終的なソースとプロジェクトのダウンロードを行ってコンパイルし、実行してみたところ
背景がスクロールしていないので、かなりわかり難いですが
不定期に画面のかくつきが発生しているように思います。
(1秒に大体一度位の頻度で、一画面が止まる)
試しに龍神録のサンプルも試してみたところ、こちらでは画面のかくつきは発生しませんでした。

前者で画面のかくつきが発生する理由が、(というより、画面描画の方法の違いが、どこにあるのかが)どうにもわからないので、
どなたか、良ければ教えていただけると幸いです。
よろしくお願いします。

環境は
OSにwindowsXP pro sp3
コンパイラに、VC++ 2008EEを使用しています。

Re:画面のかくつきについて

Posted: 2009年1月10日(土) 16:47
by Dixq (管理人)
携帯で見ているので、今実際に見れませんが、

>背景がスクロールしていないので

という背景がスクロールしていない事となにか関係があるのでしょうか?
また、かくつきとは、一瞬画面が止まるってことでしょうか?

原因はよくわかりませんが、どこで処理が止まっているか、龍神録の館のように各関数ごとに計算時間を表示、またはファイルに書き出してみてはいかがでしょうか?

Re:画面のかくつきについて

Posted: 2009年1月11日(日) 01:57
by kouki
ああ、なんだかわかりにくい言葉を使ってすみませんでした。

>かくつきとは、一瞬画面が止まるってことでしょうか?
はい、そうです。

>背景がスクロールしていない事となにか関係があるのでしょうか?
常に一定速度で動いているものが無いと、画面が一瞬止まったか判別しにくかったので、
このように書いたものの、直接関係があるわけではないです。
なんだか余計なことを書いてしまって、すみませんでした。

Dixqさんに言われたとおり、どこで処理を止まっているかを調べるために、
シューティングゲームの館に書いてあった、基本処理のループ
main関数の
while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){
の初めから、
while(GetNowCount() - RefreshTime < 17);
に行くまでの時間を計算させて表示させて見たのですが、
全て0~1ミリ秒程度の時間しかかかっておらず、処理が止まっているのが原因というわけでは無さそうです。

Re:画面のかくつきについて

Posted: 2009年1月11日(日) 18:33
by Dixq (管理人)
となると、自分で書いたコードによる影響の可能性が低くなりますね。

それはそのVGAの影響とかって可能性は考えられませんか?
その実行ファイルを他のパソコンで実行しても同じ現象が起きますか?
VGAのドライバの更新とかすると直ったりしませんかね・・。

Re:画面のかくつきについて

Posted: 2009年1月11日(日) 21:06
by kouki
while(GetNowCount() - RefreshTime < 17);

while(GetNowCount() - RefreshTime < 16);
に変更したり、この構文そのものを削除することで安定化させることはできました。
DXライブラリそのものにFPSを制御する構文が入っていたりするのでしょうか?
ただ、この場合、シューティングゲームの館に書いてあるFPS表示を使うと、
FPS61.2という値を表示させ続けており、違う意味で問題があるようにも思えますが……

FPSの値に関して気になったのことなのですが、1/60秒=1.6666ミリ秒であるのに、
while(GetNowCount() - RefreshTime < 17);
でFPSが60になるものなのでしょうか?

VGAの影響は……わかりません。
とりあえず、ドライバを最新のものに更新して試したところ、同様の現象を確認しました。