ページ 11

ゲームのタイトル画面について

Posted: 2016年8月10日(水) 22:02
by kmnb
c++初心者です
STGのタイトル画面を、画像を表示させてエンターを押すとゲームが始まるという簡単なものにしようと思い
int tit = LoadGraph("image/titl.jpg");
DrawGraph(0, 0, tit, FALSE);
void WaitEnter(void); {
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_RETURN) == 0);
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_RETURN) != 0);
}
このように書いたところ、真っ暗な画面になってしまいエンターキーを押すとやっとタイトル用の画像が一瞬表示されてプログラムが先へ進んでしまいます。
タイトル画面の表示→エンターキーを押す→ゲームスタートとするにはどのようにしたらよいでしょうか?

Re: ゲームのタイトル画面について

Posted: 2016年8月10日(水) 23:33
by みけCAT
kmnb さんが書きました:STGのタイトル画面を、画像を表示させてエンターを押すとゲームが始まるという簡単なものにしようと思い
int tit = LoadGraph("image/titl.jpg");
DrawGraph(0, 0, tit, FALSE);
void WaitEnter(void); {
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_RETURN) == 0);
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_RETURN) != 0);
}
このように書いたところ、真っ暗な画面になってしまいエンターキーを押すとやっとタイトル用の画像が一瞬表示されてプログラムが先へ進んでしまいます。
なるほど、この後半部分はWaitEnter関数の定義と見せかけて、WaitEnter関数の宣言とあまり意味のないブロックに入った普通に実行されるコードなのですね。
DXライブラリを使っていて裏画面処理をしている場合、描画を画面に反映する前に待機に入ってしまっているので、DrawGraphの後にScreenFlip();を入れると改善するかもしれません。

ただし、これは対症療法であり、書いてはいけない処理です。
kmnb さんが書きました:タイトル画面の表示→エンターキーを押す→ゲームスタートとするにはどのようにしたらよいでしょうか?
状態を持ち、タイトル画面を実行している状態でエンターキーが押されたらゲーム開始の状態に遷移するようにするといいでしょう。
例えば、以下の擬似コードのような感じです。

コード:

状態 = タイトル初期化;

画像の読み込みなどの初期化;

メインループ {
    switch(状態) {
    case タイトル初期化:
        タイトル画面の初期化処理;
        状態 = タイトル画面;
        // breakせずにそのままタイトル画面の処理に入る
    case タイトル画面:
        タイトル画面の描画などの処理;
        if (エンターキーが押された) {
            状態 = ゲーム初期化;
        }
        break;
    case ゲーム初期化:
        ゲームの初期化処理;
        状態 = ゲーム中;
        // breakせずにそのままゲームの処理に入る
    case ゲーム中:
        ゲームの処理;
        break;
    }
    メッセージ処理とか画面更新とか;
}

Re: ゲームのタイトル画面について

Posted: 2016年8月11日(木) 00:09
by kmnb
ありがとうございます
参考にしながら書き換えてみます