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

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

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

#1

投稿記事 by kmnb » 9年前

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);
}
このように書いたところ、真っ暗な画面になってしまいエンターキーを押すとやっとタイトル用の画像が一瞬表示されてプログラムが先へ進んでしまいます。
タイトル画面の表示→エンターキーを押す→ゲームスタートとするにはどのようにしたらよいでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

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;
    }
    メッセージ処理とか画面更新とか;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kmnb

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

#3

投稿記事 by kmnb » 9年前

ありがとうございます
参考にしながら書き換えてみます

閉鎖

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