ちょー簡単とは既に言えないと思うので次回から簡単RPG講座と改題します。
それでも難しいとツッコミも有りましょうが、簡単RPG講座で行きます!
まず、バグと問題点の修正です。
FPSの計算と表示の分離を行いました。
最初に表示していたためマップの下に隠れてました。
[comsub.h]
まずヘッダから。
●関数の宣言 [comsub.cpp]
続いて、プログラム側です。
●まず平均値を置く変数を外に出します。
//----------------------------------------------------------------------
// 変数
//----------------------------------------------------------------------
// 平均処理時間
static int s_AveTime=0;
前のDrawFpsを2つに分離ます。
//----------------------------------------------------------------------
// FPS計算
//----------------------------------------------------------------------
void CalcFps(int fps)
{
static int beforeTime=0,frameTime[100],count=0;
// fpsの範囲外をチェック
MACRO_ASSERT(fps0);
// フレームあたりの時間を記録。
if( count==0 ) {
frameTime[count%fps] = 0;
} else {
frameTime[count%fps] = GetNowCount()-beforeTime;
}
beforeTime=GetNowCount();
count++;
// 最後のフレーム
if((count%fps) == (fps-1) ){
// 平均フレーム時間を計算する。
s_AveTime=0;
for(int i=0;ibBack = FALSE;を追加。
[code=c]
//----------------------------------------------------------------------
// 状態管理の初期化。オブジェクトを返す。
//----------------------------------------------------------------------
STATEMNG_OBJECT STM_Init(int stateNums)
{
STATEMNG_OBJECT object = NULL;
// まず状態管理オブジェクトメモリを確保する。
object = (STATEMNG_OBJECT)malloc( sizeof(struct tag_StateMngObject)) ;
// 状態管理オブジェクトの値を初期化する。
object->nowState = -1; //現在の状態
object->beforeState = -2; //前の状態(STM_UpdateStateで現在の状態が変化なら保存)
object->nextState = -3; //次の状態(STM_UpdateStateで現在の状態にコピー)
object->stateNums = stateNums; //状態数
object->bBack = FALSE; //状態を戻すフラグ
object->pFlameCounts = NULL; //フレームカウント配列。状態数分。
// フレームカウント配列を確保する。
if( stateNums > 0 ) {
object->pFlameCounts = (int*)malloc( sizeof(int) * stateNums );
}
// 状態管理オブジェクトを返す。
return object;
}
object->bBack = FALSE;を追加。
//----------------------------------------------------------------------
// 状態を遷移する。フレームカウントは0に初期化される。
//----------------------------------------------------------------------
void STM_ChangeState(STATEMNG_OBJECT object,int state)
{
// 状態を遷移する準備。STM_UpdateStateで更新される。
object->nextState = state;
object->bBack = FALSE; //状態を戻すフラグ
}
object->bBack = TRUE;に差し替え。
//----------------------------------------------------------------------
// 前の状態に戻す。フレームカウントはそのまま。
//----------------------------------------------------------------------
void STM_SetBackState(STATEMNG_OBJECT object,int state)
{
// 状態を遷移する準備。STM_UpdateStateで更新される。
object->nextState = state;
object->bBack = TRUE; //状態を戻すフラグ
}
bBackで判断するように変更しました。
//----------------------------------------------------------------------
// 状態・フレームカウントを更新する。
//----------------------------------------------------------------------
void STM_UpdateState(STATEMNG_OBJECT object)
{
// 状態の遷移?
if( object->nextState != object->nowState ) {
// 今の状態を保存
object->beforeState = object->nowState;
// 新しい状態に遷移
object->nowState = object->nextState;
// 状態を戻した?
if( object->bBack ) {
// フレームカウントを1つ加算。
STM_SetFrameCount(object,STM_GetFrameCount(object)+1);
} else {
// フレームカウントを初期化。
STM_SetFrameCount(object,0);
}
} else {
// フレームカウントを1つ加算。
STM_SetFrameCount(object,STM_GetFrameCount(object)+1);
}
}
[mapMove.h]
まず、bCommentをヘッダに追加。
●mapMove_Draw [mapMove.cpp]
プログラム部分の変更点です。
●mapMove_Draw
まず、関数の頭の部分。bCommentが追加されています。
//----------------------------------------------------------------------
// マップとキャラクタ表示処理
//----------------------------------------------------------------------
void mapMove_Draw(MapMoveInfo_t *mapMoveInfo,int frame,int bComment)
{
まず、関数の後方の部分。bCommentが説明がON/OFF出来ます。
// メッセージ
if( bComment ) {
int basey = 400;
CenterDrawString( "「←↑→↓」で移動できます。", 20, basey, GetColor(210,210,255) );
CenterDrawString( "「MENU」ボタンでメニューが開きます。", 20, basey+20, GetColor(210,210,255) );
CenterDrawString( "「E」ボタンでイベント発生。", 20, basey+40, GetColor(210,210,255) );
CenterDrawString( "「B」ボタンでバトル発生。", 20, basey+60, GetColor(210,210,255) );
}
}
次回は、ウィンドウ・システムの説明に入ります。