まず、大きな影響のない修正と追加から説明します。
[gameMain.cpp]
●GameMain_Event関数
本当にとりあえずだったので、削除してください。
// ↓とりあえずの処理。
// ゲーム本編だよって表示
CenterDrawString( "ゲーム本編です。", 28, 200, GetColor(255,255,255) );
CenterDrawString( "イベント中です。", 20, 260, GetColor(255,255,255) );
●CharacterMuki_t
エラーガードで必要になったのでCHAR_MUKI_MAXを追加します。
// キャラクタの向き
enum CharacterMuki_t {
CHAR_MUKI_RIGHT, //右向き
CHAR_MUKI_UP, //上向き
CHAR_MUKI_DOWN, //下向き
CHAR_MUKI_LEFT, //左向き
CHAR_MUKI_MAX,
};
[map.h]
●関数の宣言
関数を追加します。 [map.cpp]
プログラム側はバグの修正と関数の追加です。
●定数
バグ修正のためEVENT_CHAR_BORN_ENDを追加します。
// イベントに関する定義
#define EVENT_CHAR_BORN_NO 0x40 //キャラ発生のスタートイベント番号
#define EVENT_CHAR_BORN_END 0x7F //キャラ発生のエンドイベント番号
町人との当たり判定の都合で判断条件を変更します。
//------------------------
// 町人と当たり判定
//------------------------
if( map_HitMapCharCheck(px,py) >= 0 ) {
// 歩けない。
return TRUE;
}
return FALSE;
}
新しく追加した外部関数です。
マップ固有キャラクタとの当たり判定を行い衝突したキャラクタのイベント番号を持ち帰ります。
衝突しないときはお約束の-1が戻り値です。
//----------------------------------------------------------------------
// マップ固有キャラクタとの当たり判定。px,pyはキャラクタの左上座標。
//----------------------------------------------------------------------
int map_CharHitJudge(int px,int py)
{
//------------------------
// 町人と当たり判定
//------------------------
int evtno = map_HitMapCharCheck(px,py);
if( evtno >= 0 ) {
// 衝突するキャラクタのイベント番号を持ち帰る。
return evtno;
}
// 衝突していないのでイベントは発生しない。
return -1;
}
当たり判定が雑だったのでBOX同士の当たり判定に変えました。
衝突した場合はキャラクタのイベント番号を返して、当たらない場合は-1を返します。
//----------------------------------------------------------------------
// (内部関数)マップ固有キャラとの当たり判定
//----------------------------------------------------------------------
static int map_HitMapCharCheck(int px,int py)
{
// 有効なマップ固有キャラクタと当たり判定する。
for( int bn=0 ; bn= EVENT_CHAR_BORN_NO ) {
↓
正 if( (pno >= EVENT_CHAR_BORN_NO) && (pno <= EVENT_CHAR_BORN_END) ) {
続きまっす。