ゲームプログラミングの館にあるC++でのメニューの作り方を読んでみたのですが
あそこに書いてあった方法で「項目の数を可変」にすることは出来るのでしょうか?
条件を満たすとステージが開放されるという形にしたいのですが、
どうしたら実現できるでしょうか?
C++でのメニュー画面
Re: C++でのメニュー画面
>> 夢幻ノ月夜さん
http://dixq.net/g/sp_06.html
こちらのページのこと宜しいでしょうか。
上から流し読みしたので間違ってるところもあるかもしれませんが。
例えば class Secret : public BaseScene{ ... };
というような BaseScene クラスを派生した解放画面用のシーンクラスを用意。
各シーンの状態が enum 列挙された部分に
eScene_Secret を追加。
Menu::Update() 内に、解放画面用の処理を追加
メニュー項目を描画してるところの処理も同じように解放条件が整うまでは描画しないなどに変更
SceneMgr::Update 内に解放画面を実行するための準備を行う。
このような形で処理を追加・分岐するようにしておけば可変する項目はとりあえず出来るように思いました。
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));
}
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(); //シーンの更新
}
Re: C++でのメニュー画面
やはり開放しているステージにフラグを立てることで実現しようと思います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); //シーンを解放画面に変更 } }
SceneMgr::Update 内に解放画面を実行するための準備を行う。//描画 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)); }
このような形で処理を追加・分岐するようにしておけば可変する項目はとりあえず出来るように思いました。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(); //シーンの更新 }
ありがとうございます
毎回ゲーム作ろうとするたびに壁にぶち当たる