ページ 1 / 1
ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 16:42
by hibi
現在進行形で、「ゲームプログラミングの館」を読んでいます。
でてきた疑問をすべて、この掲示板で聞くつもりでやってきました。
しつこいと感じることや、何度も似たようなことを聞くかもしれませんがお願いします。
・下のように、いかなるループでも必ずProcessMessage関数 と ClearDrawScreen関数が必要なんですか
コード:
while( 1 ){
if( ProcessMessage() != 0 ){ // メッセージ処理
break;//ウィンドウの×ボタンが押されたらループ
}
ClearDrawScreen(); // 画面を消す
}
・なぜ、したのように書いただけで、「×ボタン」で処理できるようになるんですか
コード:
while( 1 ){
if( ProcessMessage() != 0 ){
break;
}
}
・フレームレートのお話がよくわからないんですが、もっと簡単に教えてください
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 16:49
by softya(ソフト屋)
質問が整理できたいないみたいですね。整理してみましょう。
1.下のように、いかなるループでも必ずProcessMessage関数 と ClearDrawScreen関数が必要なんですか
ProcessMessage()やClearDrawScreen()の機能は調べられましたか? ここで既に勉強は始まっています。
検索すると分かりますのでURLを書きませんが、DXライブラリのリファレンスに解説されています。調べ方を覚えるのも勉強です。
答えとしてはClearDrawScreen関数は必要な場合もありますしない場合もあります。
ProcessMessage関数はウィンドウを表示する都合上は必須です。
2.なぜ、したのように書いただけで、「×ボタン」で処理できるようになるんですか
これも上と同様です。リファレンスを見てもわからない部分を聞いていてだけますか。
3.フレームレートのお話がよくわからないんですが、もっと簡単に教えてください
これは難しいです。
フレームレート自体が分からないのか、プログラムコードが分からないのかをまず考えてみてください。
分からないところを解説しますので、もっと具体的にお願いします。
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 17:12
by hibi
一つ目と二つ目は理解できました。
自分なりの解釈があっているか、質問を整理して、並べてみました。
・常に表画面は更新されている
・直接、裏画面を使わずに画像の表示などを行うと更新のスピードを無視することになる
・↑があるために、裏画面で一度、処理を行う必要がある
・ScreenFlip関数は表画面のスピードを考えて、タイミングを勝手に見計らって処理する
・1秒間に表画面を更新するスピードがフレームレートである
解釈があっていれば、合っている、違っていれば、何がどう違うのか教えてください。
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 17:23
by softya(ソフト屋)
・常に表画面は更新されている
正しくはモニタ表示されているだと思います。
・直接、裏画面を使わずに画像の表示などを行うと更新のスピードを無視することになる
問題は画面の書き換えがモニタ表示されてしまう事です。
・↑があるために、裏画面で一度、処理を行う必要がある
裏画面は書き換え途中を見せないためです。必須ではありません。
・ScreenFlip関数は表画面のスピードを考えて、タイミングを勝手に見計らって処理する
モニタの書き換え終了にシンクロします。
環境次第ではシンクロ出来ない場合もあります(現代ではないか?)。
・1秒間に表画面を更新するスピードがフレームレートである
裏画面がなくても、単なる画面の更新頻度がフレームレートです。
フレーム=画面、レート=割合 で画面の更新頻度です。
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 17:47
by hibi
「モニタ表示」って書けばよかったんですね。「更新」って。。。
すみません、言葉選びが下手でした。気をつけます。
・書き換えがモニタに表示されると、画像の動きがガタガタするわけですよね?
・裏画面を使わなかった場合、↑のようになってしまうのではないのですか。「必須ではない」というのがわかりません。
・モニタの書き換えが終わる→表画面に裏画面の中身を渡す→モニタ書き換え→モニタの書き換えがおわる・・・・
ってことを自動で見計らって行うのが、ScreenFlip関数ですか。
・モニタの更新処理スピードがフレームレートである。
あまり、変化ないかもしれませんが、よろしくお願いします
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 18:14
by softya(ソフト屋)
・書き換えがモニタに表示されると、画像の動きがガタガタするわけですよね?
そうですね。
・裏画面を使わなかった場合、↑のようになってしまうのではないのですか。「必須ではない」というのがわかりません。
すごく早く終わるなら目立たない場合や、同期信号中に終わる場合もあります。
・モニタの書き換えが終わる→表画面に裏画面の中身を渡す→モニタ書き換え→モニタの書き換えがおわる・・・・
ってことを自動で見計らって行うのが、ScreenFlip関数ですか
ざっと意味としてはあっています。
若干心配な部分もありますので書き変えますが、
裏画面の描画の終わりを待つ→モニタの同期信号を待つ(画面の更新終了)→裏画面と表画面を切り替える。→次の裏画面の描画を開始する。
これがScreenFlip関数です。
・モニタの更新処理スピードがフレームレートである。
よくfps(フレーム/秒)と言いますが、60fpsではない30fpsなゲームってありますよね。
でもモニタの更新頻度は固定です。ゲームの専用モニタでも無い限り大抵は秒あたり60回。
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 18:47
by hibi
細かいところまで教えていただきありがとうございました。
ゲームを作る以前の問題として気になっていたことがなくなりました。
ようやく、制作に取り組めそうです。
ゲームプログラミングの館を読んで、また質問が出るかもしれませんが、今のところなんとか無事始めれそうです。
また、質問しにきますので(絶対です笑)またよろしくお願いします。
Re: ゲームプログラミングの館を読んで
Posted: 2013年8月05日(月) 19:07
by softya(ソフト屋)
書き忘れました!
Dxライブラリの場合はウィンドウモードとフルスクリーンでは動作が違います。
書き換えが見えるとしたら、フルスクリーンの方です。
あとWindowsのドライバの動作によっても変わると思います。
気になるなら色々実験して、見て理解する方法をおすすめします。