C++勉強中ですが、慣れてみようということで人様のコードをクラス化していじっています。
RPG講座はCですがオブジェクト指向にとても近いようで、初心者の私でもクラス化しやすい。
以下はソフト屋さん(http://dixq.net/forum/blog.php?u=114&b=2074)の
RPG講座がオリジナルであることを明記します。
シーン遷移クラスという感じですが、キャラのアニメーション管理とかにも応用効きそうですよね。
#ifndef _CSTATEMNG_
#define _CSTATEMNG_
class CStateMng
{
private:
int nowState; //現在の状態
int beforeState; //前の状態(STM_UpdateStateで現在の状態が変化なら保存)
int nextState; //次の状態(STM_UpdateStateで現在の状態にコピー)
int stateNums; //状態数
int bBack; //状態を戻すフラグ
int bReset; //状態を強制設定するフラグ
int *pFlameCounts; //フレームカウント配列。状態数分。
// フレームカウントのセット
void STM_SetFrameCount(int count);
// コピー禁止措置
CStateMng(const CStateMng&);
CStateMng& operator = (const CStateMng&);
public:
// コンストラクタ
CStateMng();
CStateMng(int _stateNums);
// デストラクタ
~CStateMng();
// 状態を強制設定する。フレームカウントは0に初期化される。
void STM_ResetState(int state);
// 状態を遷移する。フレームカウントは0に初期化される。
void STM_ChangeState(int state);
// 現在の状態を得る。
int STM_GetState()const;
// 現在の状態のフレームカウントを得る。
int STM_GetFrameCount()const;
// 1つ前の状態を得る。
int STM_GetBackState()const;
// 前の状態に戻す。フレームカウントはそのまま。
void STM_SetBackState(int state);
// 状態・フレームカウントを更新する。
void STM_UpdateState();
};
#endif
#include
#include "DxLib.h"
#include "CStateMng.h"
CStateMng::CStateMng()
{
nowState=-1; //現在の状態
beforeState=-2; //前の状態(STM_UpdateStateで現在の状態が変化なら保存)
nextState=-3; //次の状態(STM_UpdateStateで現在の状態にコピー)
stateNums=0; //状態数
bBack=FALSE; //状態を戻すフラグ
bReset=FALSE;
pFlameCounts=NULL; //フレームカウント配列。状態数分。
}
CStateMng::CStateMng(int _stateNums)
{
nowState=-1; //現在の状態
beforeState=-2; //前の状態(STM_UpdateStateで現在の状態が変化なら保存)
nextState=-3; //次の状態(STM_UpdateStateで現在の状態にコピー)
stateNums=_stateNums; //状態数
bBack=FALSE; //状態を戻すフラグ
bReset=FALSE;
pFlameCounts=NULL; //フレームカウント配列。状態数分。
if(pFlameCounts == NULL)
{
pFlameCounts = new int[_stateNums]; //動的確保
for(int i=0; i=0 );
assert( nowState =0 );
assert( nowStatestateNums );
// フレームカウントを設定する。
pFlameCounts[nowState] = count;
}