ゲームプログラミングの館を読んで

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hibi

ゲームプログラミングの館を読んで

#1

投稿記事 by hibi » 12年前

現在進行形で、「ゲームプログラミングの館」を読んでいます。

でてきた疑問をすべて、この掲示板で聞くつもりでやってきました。
しつこいと感じることや、何度も似たようなことを聞くかもしれませんがお願いします。

・下のように、いかなるループでも必ずProcessMessage関数 と ClearDrawScreen関数が必要なんですか

コード:

while( 1 ){
                if( ProcessMessage() != 0 ){ // メッセージ処理
                        break;//ウィンドウの×ボタンが押されたらループ
        }
       ClearDrawScreen(); // 画面を消す
       }
・なぜ、したのように書いただけで、「×ボタン」で処理できるようになるんですか

コード:

while( 1 ){
                if( ProcessMessage() != 0 ){
                        break;
                }
        }
・フレームレートのお話がよくわからないんですが、もっと簡単に教えてください

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームプログラミングの館を読んで

#2

投稿記事 by softya(ソフト屋) » 12年前

質問が整理できたいないみたいですね。整理してみましょう。

1.下のように、いかなるループでも必ずProcessMessage関数 と ClearDrawScreen関数が必要なんですか

ProcessMessage()やClearDrawScreen()の機能は調べられましたか? ここで既に勉強は始まっています。
検索すると分かりますのでURLを書きませんが、DXライブラリのリファレンスに解説されています。調べ方を覚えるのも勉強です。
答えとしてはClearDrawScreen関数は必要な場合もありますしない場合もあります。
ProcessMessage関数はウィンドウを表示する都合上は必須です。

2.なぜ、したのように書いただけで、「×ボタン」で処理できるようになるんですか

これも上と同様です。リファレンスを見てもわからない部分を聞いていてだけますか。

3.フレームレートのお話がよくわからないんですが、もっと簡単に教えてください

これは難しいです。
フレームレート自体が分からないのか、プログラムコードが分からないのかをまず考えてみてください。
分からないところを解説しますので、もっと具体的にお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

hibi

Re: ゲームプログラミングの館を読んで

#3

投稿記事 by hibi » 12年前

一つ目と二つ目は理解できました。

自分なりの解釈があっているか、質問を整理して、並べてみました。

・常に表画面は更新されている
・直接、裏画面を使わずに画像の表示などを行うと更新のスピードを無視することになる
・↑があるために、裏画面で一度、処理を行う必要がある
・ScreenFlip関数は表画面のスピードを考えて、タイミングを勝手に見計らって処理する
・1秒間に表画面を更新するスピードがフレームレートである

解釈があっていれば、合っている、違っていれば、何がどう違うのか教えてください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームプログラミングの館を読んで

#4

投稿記事 by softya(ソフト屋) » 12年前

・常に表画面は更新されている
正しくはモニタ表示されているだと思います。

・直接、裏画面を使わずに画像の表示などを行うと更新のスピードを無視することになる
問題は画面の書き換えがモニタ表示されてしまう事です。

・↑があるために、裏画面で一度、処理を行う必要がある
裏画面は書き換え途中を見せないためです。必須ではありません。

・ScreenFlip関数は表画面のスピードを考えて、タイミングを勝手に見計らって処理する
モニタの書き換え終了にシンクロします。
環境次第ではシンクロ出来ない場合もあります(現代ではないか?)。

・1秒間に表画面を更新するスピードがフレームレートである
裏画面がなくても、単なる画面の更新頻度がフレームレートです。
フレーム=画面、レート=割合 で画面の更新頻度です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

hibi

Re: ゲームプログラミングの館を読んで

#5

投稿記事 by hibi » 12年前

「モニタ表示」って書けばよかったんですね。「更新」って。。。
すみません、言葉選びが下手でした。気をつけます。

・書き換えがモニタに表示されると、画像の動きがガタガタするわけですよね?
・裏画面を使わなかった場合、↑のようになってしまうのではないのですか。「必須ではない」というのがわかりません。
・モニタの書き換えが終わる→表画面に裏画面の中身を渡す→モニタ書き換え→モニタの書き換えがおわる・・・・
ってことを自動で見計らって行うのが、ScreenFlip関数ですか。
・モニタの更新処理スピードがフレームレートである。

あまり、変化ないかもしれませんが、よろしくお願いします

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームプログラミングの館を読んで

#6

投稿記事 by softya(ソフト屋) » 12年前

・書き換えがモニタに表示されると、画像の動きがガタガタするわけですよね?
そうですね。

・裏画面を使わなかった場合、↑のようになってしまうのではないのですか。「必須ではない」というのがわかりません。
すごく早く終わるなら目立たない場合や、同期信号中に終わる場合もあります。

・モニタの書き換えが終わる→表画面に裏画面の中身を渡す→モニタ書き換え→モニタの書き換えがおわる・・・・
ってことを自動で見計らって行うのが、ScreenFlip関数ですか

ざっと意味としてはあっています。
若干心配な部分もありますので書き変えますが、

裏画面の描画の終わりを待つ→モニタの同期信号を待つ(画面の更新終了)→裏画面と表画面を切り替える。→次の裏画面の描画を開始する。
これがScreenFlip関数です。

・モニタの更新処理スピードがフレームレートである。
よくfps(フレーム/秒)と言いますが、60fpsではない30fpsなゲームってありますよね。
でもモニタの更新頻度は固定です。ゲームの専用モニタでも無い限り大抵は秒あたり60回。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

hibi

Re: ゲームプログラミングの館を読んで

#7

投稿記事 by hibi » 12年前

細かいところまで教えていただきありがとうございました。
ゲームを作る以前の問題として気になっていたことがなくなりました。
ようやく、制作に取り組めそうです。
ゲームプログラミングの館を読んで、また質問が出るかもしれませんが、今のところなんとか無事始めれそうです。
また、質問しにきますので(絶対です笑)またよろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームプログラミングの館を読んで

#8

投稿記事 by softya(ソフト屋) » 12年前

書き忘れました!
Dxライブラリの場合はウィンドウモードとフルスクリーンでは動作が違います。
書き換えが見えるとしたら、フルスクリーンの方です。
あとWindowsのドライバの動作によっても変わると思います。
気になるなら色々実験して、見て理解する方法をおすすめします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る