C++でのメニュー画面

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

C++でのメニュー画面

#1

投稿記事 by 夢幻ノ月夜 » 4年前

ゲームプログラミングの館にあるC++でのメニューの作り方を読んでみたのですが
あそこに書いてあった方法で「項目の数を可変」にすることは出来るのでしょうか?
条件を満たすとステージが開放されるという形にしたいのですが、
どうしたら実現できるでしょうか?
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
DVDM
記事: 38
登録日時: 10年前
住所: 大阪
連絡を取る:

Re: C++でのメニュー画面

#2

投稿記事 by DVDM » 4年前

>> 夢幻ノ月夜さん
http://dixq.net/g/sp_06.html
こちらのページのこと宜しいでしょうか。
上から流し読みしたので間違ってるところもあるかもしれませんが。

例えば class Secret : public BaseScene{ ... };
というような BaseScene クラスを派生した解放画面用のシーンクラスを用意。

各シーンの状態が enum 列挙された部分に
eScene_Secret を追加。

Menu::Update() 内に、解放画面用の処理を追加

コード:

//更新
void Menu::Update(){

    ・・・

    if(解放条件フラグがON && 決定キーが押されたら){
        mSceneChanger->ChangeScene(eScene_Secret); //シーンを解放画面に変更
    }
}
メニュー項目を描画してるところの処理も同じように解放条件が整うまでは描画しないなどに変更

コード:

//描画
void Menu::Draw(){
    BaseScene::Draw();//親クラスの描画メソッドを呼ぶ
    DrawString(0, 0,"メニュー画面です。",GetColor(255,255,255));
    DrawString(0,20,"Gキーを押すとゲーム画面に進みます。",GetColor(255,255,255));
    DrawString(0,40,"Cキーを押すと 設定画面に進みます。",GetColor(255,255,255));

    if(解放条件フラグが ON)
        DrawString(0,40,"決定キーを押すと 解放画面に進みます。",GetColor(255,255,255));
}
SceneMgr::Update 内に解放画面を実行するための準備を行う。

コード:

void SceneMgr::Update(){
    if(mNextScene != eScene_None){    //次のシーンがセットされていたら
        mScene->Finalize();//現在のシーンの終了処理を実行
        delete mScene;

        ・・・

        switch(mNextScene){       //シーンによって処理を分岐
        case eScene_Secret:        //次の画面が解放画面なら
            mScene = (BaseScene*) new Secret(this);   //解放画面のインスタンスを生成する
            break;//以下略
        }
        mNextScene = eScene_None;    //次のシーン情報をクリア
        mScene->Initialize();    //シーンを初期化
    }

    mScene->Update(); //シーンの更新
}
このような形で処理を追加・分岐するようにしておけば可変する項目はとりあえず出来るように思いました。

アバター
夢幻ノ月夜
記事: 140
登録日時: 5年前
住所: Stens;Gate世界線

Re: C++でのメニュー画面

#3

投稿記事 by 夢幻ノ月夜 » 4年前

DVDM さんが書きました:>> 夢幻ノ月夜さん
http://dixq.net/g/sp_06.html
こちらのページのこと宜しいでしょうか。
上から流し読みしたので間違ってるところもあるかもしれませんが。

例えば class Secret : public BaseScene{ ... };
というような BaseScene クラスを派生した解放画面用のシーンクラスを用意。

各シーンの状態が enum 列挙された部分に
eScene_Secret を追加。

Menu::Update() 内に、解放画面用の処理を追加

コード:

//更新
void Menu::Update(){

    ・・・

    if(解放条件フラグがON && 決定キーが押されたら){
        mSceneChanger->ChangeScene(eScene_Secret); //シーンを解放画面に変更
    }
}
メニュー項目を描画してるところの処理も同じように解放条件が整うまでは描画しないなどに変更

コード:

//描画
void Menu::Draw(){
    BaseScene::Draw();//親クラスの描画メソッドを呼ぶ
    DrawString(0, 0,"メニュー画面です。",GetColor(255,255,255));
    DrawString(0,20,"Gキーを押すとゲーム画面に進みます。",GetColor(255,255,255));
    DrawString(0,40,"Cキーを押すと 設定画面に進みます。",GetColor(255,255,255));

    if(解放条件フラグが ON)
        DrawString(0,40,"決定キーを押すと 解放画面に進みます。",GetColor(255,255,255));
}
SceneMgr::Update 内に解放画面を実行するための準備を行う。

コード:

void SceneMgr::Update(){
    if(mNextScene != eScene_None){    //次のシーンがセットされていたら
        mScene->Finalize();//現在のシーンの終了処理を実行
        delete mScene;

        ・・・

        switch(mNextScene){       //シーンによって処理を分岐
        case eScene_Secret:        //次の画面が解放画面なら
            mScene = (BaseScene*) new Secret(this);   //解放画面のインスタンスを生成する
            break;//以下略
        }
        mNextScene = eScene_None;    //次のシーン情報をクリア
        mScene->Initialize();    //シーンを初期化
    }

    mScene->Update(); //シーンの更新
}
このような形で処理を追加・分岐するようにしておけば可変する項目はとりあえず出来るように思いました。
やはり開放しているステージにフラグを立てることで実現しようと思います
ありがとうございます
毎回ゲーム作ろうとするたびに壁にぶち当たる

閉鎖

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