新・ゲームプログラミングの館で細々とゲーム製作の勉強をしている者です。
1.8「コードを短く書く 」について疑問点がある為、質問させて頂きます。
裏画面に描いた内容を表画面に反映する処理を短く書かない場合、ループ内で以下の順番で処理しています。
引用ですが以下の処理順(関数の実行順)です。
1.画面に描画した内容を消す(ClearDrawScreen関数)
2.画像を描画する(DrawGraphなど...)
3.裏画面に描いた内容を表画面に反映する(ScreenFlip関数)
一方、短く書く場合にはWhileの条件式として上記の処理を順番に行っている(と思う)のですが、その実行順が以下であるという認識です。
1.裏画面に描いた内容を表画面に反映する
2.画面に描画した内容を消す
3.画像を描画する
以下、実際のソースの一部です。
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
MenuDraw(); //メニュー描画
}
実際に実行すると、きちんと画像が表示されるので、この考えが間違っているのは確かなのですが、何故上記の処理で正常に描画が行われるかが分からない状態です。この疑問を解決したく、質問させて頂きました。
もしかしてClearDrawScreenというのは、裏画面に対してのクリア(というよりはSetDrawScreenで指定した先の画面のクリア)という事なのでしょうか……?
あとこれは余談なので無視して頂いても構わないのですが、、、
以下のように、Whileの条件式でのScreenFlip関数の実行をやめ、ループ内でZキーが押された場合にScreenFlip関数の実行を行うようにしました。この場合、Zキー押下後に描画は行われるのですが、キー押下後0.5~1秒程してから描画されます。
キー押下後、すぐに描画されると思っていたのですが、何故こうなるのでしょうか?
// while( メッセージ処理, 画面クリア)
while( ProcessMessage()==0 && ClearDrawScreen()==0 ){
Keyboard_Update(); //キーの入力状態を記録
MenuDraw(); //メニュー描画
if (Keyboard_Get(KEY_INPUT_Z)) {
ScreenFlip();
}
}
PS:一文字の名前が禁止されている……!!
最後に投稿したのが2,3年前くらいですので、ちょっとビックリしました...w