前提・実現したいこと
現在デザインパターンの勉強としてStateパターンを使ってゲームを作っています。
StateパターンのContextをCharacterとし、Stateという抽象クラス(インターフェイス)を作って。そこからidle,runや,jump,sliding,Climb...といった感じに派生して作っています。そしてCharacterクラスでStateを持って、、、といったおそらく普通のStateパターンを組んでいます。
しかし、今回はContextであるCharacterクラスを継承してPlayer、enemyクラスを作ることにしました。Player、enemyも同じステータスが必要です。
現在悩んでいることはPayerにしか必要ないが、stateに渡してその中で変更したい変数をどうするかというのに悩んでいます。
該当のソースコード
C++
1//stateの抽象クラス 2#include "Character.h" 3 4class Character; 5class State 6{ 7public: 8 virtual ~State() {}; 9 virtual State* handleInput(Character& chara,int input) = 0;//inputを受け取って次のステータスを返す 10 virtual void update(Character& chara) = 0;//更新処理 11 virtual void enter(Character& chara) = 0;//ステータス変更時に一回だけ呼ばれる 12}; 13 14
C++
1//Characterの抽象クラス player,enemyクラスに継承 2class Character 3{ 4protected: 5/* 6*座標や回転など基本的な情報 7*/ 8 State nowState; 9 10/*!!playerにしかいらない変数!!*/ 11int height 12 13public: 14 virtual ~Character() {}; 15 virtual void Initialize() = 0;//初期化 16 virtual void handleInput();//state->handleInputから帰ってきたステータスをnowStateに格納 17 virtual void update();//nowState->update 18 void render(); 19 20
試したこと
現在はCharacterクラスの中に入れましたが、明らかに間違いだと思います。
そもそもstateパターンを使うべきではないのか、別々に作る必要があるのか、知らないだけで回避方法があるのか自分では判断がつかないため質問させてもらいました。
補足情報(FW/ツールのバージョンなど)
今回はplayerが座標をカメラに渡すためのゲッターがあり、座標のy軸+変数heightでカメラの座標を決めます。
heightはsliding時に小さくなって、ほかのステータスに行くときに戻る、といった感じです。
他にもplayerにしか必要のない変数はありますが今回は省略しています。
もしよろしければ回答のほどよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/03 23:01
2020/11/04 01:13
2020/11/04 01:37 編集
2020/11/04 03:03
2020/11/04 03:45
2020/11/04 03:48
2020/11/04 03:50