あけましておめでとうございます。今年も引き続きパーツカスタマイズを行えるSTGを作成中なのですが、現在カスタマイズ画面での選択を別のクラスやシーンに反映させる方法(例えばカスタマイズ画面であるフラグが1になったことで自機の画像が変わる、ゲーム画面に「現在○○を装備しています」と表示されるなど)がわからなくて苦戦しております……。
ポインタ辺りを使えば良いのかなど考えてはおりますが、実際にはどのような処理を施せばフラグが立ったことで設定が反映されたようにする(見せる?)事が出来るのでしょうか?アドバイスの程宜しくお願いします
ちなみに自分はC++を学び始めて9~10ヶ月程で、ポインタや継承に関してはどういうものなのかは分かってはいるが、それをどうやって応用すればいいかが分からないというのが現状です。
開発環境はWindows7 VisualStudio2012となっています。
あるクラス内で立ったフラグを他クラスに反映させる方法
Re: あるクラス内で立ったフラグを他クラスに反映させる方法
ちょっと漠然としていますね.
「あるクラス内でフラグが立つ」とは…?
「フラグ」がどこに存在するのかわかりませんが,とりあえずそのフラグの状態を得るための手段を用意すればどうでしょうか?
「他のクラス」は,必要なときに,「あるクラス」が立てたかもしれないフラグの状態を情報としてもらえればいい.
「あるクラス内でフラグが立つ」とは…?
「フラグ」がどこに存在するのかわかりませんが,とりあえずそのフラグの状態を得るための手段を用意すればどうでしょうか?
//あるクラス
class A
{
public:
A() { m_Flag=false; }
public:
void Work_of_A(){ m_Flag = true; } //何か処理の結果としてフラグが立つ
bool GetFlag() const { return m_Flag; } //フラグの状態を返す
private:
bool m_Flag; //フラグ
};
Re: あるクラス内で立ったフラグを他クラスに反映させる方法
モデル-ビュー アーキテクチャ的なことでしょうか。
ある情報(モデル)に対して、どの画像(ビュー)が影響を受けるかを整理しましょう。
そして、その関係を(汎用的に)管理するモジュールを用意しましょう。
変化があった場合は、そのモジュールに伝えます。
そのモジュールが影響を受けるモジュールに再描画を指示します。
そうすることで変化の要因を隠すことができて、特定のフラグに限らず応用できます。
ある情報(モデル)に対して、どの画像(ビュー)が影響を受けるかを整理しましょう。
そして、その関係を(汎用的に)管理するモジュールを用意しましょう。
変化があった場合は、そのモジュールに伝えます。
そのモジュールが影響を受けるモジュールに再描画を指示します。
そうすることで変化の要因を隠すことができて、特定のフラグに限らず応用できます。
Re: あるクラス内で立ったフラグを他クラスに反映させる方法
>>suaoさん
>フラグがどこに存在するかわからない
確かに少し漠然としすぎましたね……
例えばカスタマイズを行うクラスで
といった処理が入っていて、この「Rapid_flagが1になった」というのを他のクラスに伝える方法が知りたいという感じですね。
>>ISLe()さん
それはゲームプログラミングの館のメニュー画面の作り方(C++編)で取り上げられてたのと同じような感じでしょうか?
>フラグがどこに存在するかわからない
確かに少し漠然としすぎましたね……
例えばカスタマイズを行うクラスで
if(mWeapon_flag==1){
///メイン武器フラグが1のときの動作///
if(Keyboard_Get(KEY_INPUT_DOWN)==1){
NowSelectMP =(NowSelectMP + 1)%eMainP_Num;
}
if(Keyboard_Get(KEY_INPUT_UP)==1){//上キーが押されていたら
NowSelectMP = (NowSelectMP + (eMainP_Num-1))%eMainP_Num;//選択状態を一つ上げる
}
if(Keyboard_Get(KEY_INPUT_RETURN)==1){//エンターキーが押されたら
switch(NowSelectMP){//現在選択中の状態によって処理を分岐
case eMainP_Rapid://速射武器選択中なら
if(RapidM_flag==0){
RapidM_flag = 1;
PowerM_flag=0;
JunkM_flag=0;
break;
}
>>ISLe()さん
それはゲームプログラミングの館のメニュー画面の作り方(C++編)で取り上げられてたのと同じような感じでしょうか?
Re: あるクラス内で立ったフラグを他クラスに反映させる方法
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>
int main(){
std::vector<std::function<void()>> callbacks;
callbacks.push_back([]{
std::cout << "UHOHOHOHO" << std::endl;
});
callbacks.push_back([]{
std::cout << "YPAAAAAAAAAAAAAAAAA" << std::endl;
});
// なんかフラグたったぞい!!!!(フラグが1になったイベントなど)
std::for_each( callbacks.begin(), callbacks.end(), []( std::function<void()> f ){
f(); // 登録したコールバックが実行されるぞい!!!
});
}
GoFのObserverパターンとか調べても幸せになれるかもしれません。
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
: ? Is the は :
✜ order C++? ✜
: す + 注 :
¦ か + 文 ¦
: ? Is the は :
✜ order C++? ✜
糸冬
――――――――
制作・著作 NHK
――――――――
制作・著作 NHK
Re: あるクラス内で立ったフラグを他クラスに反映させる方法
返信が遅れて申し訳ありませんでした!
色々なアドバイスありがとうございます。
未だ肝心のプログラムの修正には漕ぎ付いていませんが、長くこのトピックを放置してしまったので解決にさせていただきます。
色々なアドバイスありがとうございます。
未だ肝心のプログラムの修正には漕ぎ付いていませんが、長くこのトピックを放置してしまったので解決にさせていただきます。