簡単RPG講座10-5。イベント(シナリオ)システム編5

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

簡単RPG講座10-5。イベント(シナリオ)システム編5

投稿記事 by softya(ソフト屋) » 14年前

今回は会話イベントとマップチェンジ・イベントを追加していきます。
まず、大きな影響のない修正と追加から説明します。
[gameMain.cpp]
●GameMain_Event関数
本当にとりあえずだったので、削除してください。

CODE:

	//	↓とりあえずの処理。
	
	//	ゲーム本編だよって表示
	CenterDrawString( "ゲーム本編です。", 28, 200, GetColor(255,255,255) );
	CenterDrawString( "イベント中です。", 20, 260, GetColor(255,255,255) );
[main.h]
●CharacterMuki_t
エラーガードで必要になったのでCHAR_MUKI_MAXを追加します。

CODE:

//	キャラクタの向き
enum CharacterMuki_t {
	CHAR_MUKI_RIGHT,	//右向き
	CHAR_MUKI_UP,		//上向き
	CHAR_MUKI_DOWN,		//下向き
	CHAR_MUKI_LEFT,		//左向き
	
	CHAR_MUKI_MAX,
};
続いて、マップ固有のキャラクタとのイベント発生の仕組みを実装します。
[map.h]
●関数の宣言
関数を追加します。

CODE:

//	マップ固有キャラクタとの当たり判定。px,pyはキャラクタの左上座標。
extern int map_CharHitJudge(int px,int py);
[map.cpp]
プログラム側はバグの修正と関数の追加です。
●定数
バグ修正のためEVENT_CHAR_BORN_ENDを追加します。

CODE:

//	イベントに関する定義
#define EVENT_CHAR_BORN_NO	0x40	//キャラ発生のスタートイベント番号
#define EVENT_CHAR_BORN_END	0x7F	//キャラ発生のエンドイベント番号
●map_HitJudge
町人との当たり判定の都合で判断条件を変更します。

CODE:

	//------------------------
	//	町人と当たり判定
	//------------------------
	
	if( map_HitMapCharCheck(px,py) >= 0 ) {
		//	歩けない。
		return TRUE;
	}
	
	return FALSE;
}
●map_CharHitJudge
新しく追加した外部関数です。
マップ固有キャラクタとの当たり判定を行い衝突したキャラクタのイベント番号を持ち帰ります。
衝突しないときはお約束の-1が戻り値です。

CODE:

//----------------------------------------------------------------------
//	マップ固有キャラクタとの当たり判定。px,pyはキャラクタの左上座標。
//----------------------------------------------------------------------
int map_CharHitJudge(int px,int py)
{
	//------------------------
	//	町人と当たり判定
	//------------------------
	
	int evtno = map_HitMapCharCheck(px,py);
	if( evtno >= 0 ) {
		//	衝突するキャラクタのイベント番号を持ち帰る。
		return evtno;
	}
	
	//	衝突していないのでイベントは発生しない。
	return -1;
}
●map_HitMapCharCheck
当たり判定が雑だったのでBOX同士の当たり判定に変えました。
衝突した場合はキャラクタのイベント番号を返して、当たらない場合は-1を返します。

CODE:

//----------------------------------------------------------------------
//	(内部関数)マップ固有キャラとの当たり判定
//----------------------------------------------------------------------
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) ) {
と言うことで軽くウォーミングアップ。
続きまっす。

コメントはまだありません。