0からのゲームプログラミング > アニメーション 2

Back Next
更新日 2004.03.14
アニメーション 2

 続きです。Touch.h では、Explosion.h をインクルードし、メンバ変数に CExplosion クラスへのポインタを定義し、メンバ関数 SetExplosion を追加しています。

Touch.h

//====================================================================
//			ヘッダファイルのインクルード
//====================================================================
#include	"JikiShot.h"
#include	"Enemy.h"
#include	"Explosion.h"


//====================================================================
//			CTouch クラスの定義
//====================================================================
class CTouch{
	CJikiShot	*m_pJikiShot;			// 自機の弾クラス
	CEnemy		*m_pEnemy;			// 敵機クラス
	CExplosion	*m_pExplosion;			// 爆発クラス

public:
	void JikiShotAndEnemy(void);

	void SetJikiShot(CJikiShot * pJikiShot){
		m_pJikiShot = pJikiShot;
	}
	void SetEnemy(CEnemy * pEnemy){
		m_pEnemy = pEnemy;
	}
	void SetExplosion(CExplosion * pExplosion){
		m_pExplosion = pExplosion;
	}
};


 CTouch::JikiShotAndEnemy では、自機の弾と敵機が当たったとき、爆発を発生させる関数を呼び出しておきます。

Touch.cpp

// 自機の弾と敵機との当たり判定
// 引数、戻値なし。
void CTouch::JikiShotAndEnemy(void)
{
	・
	・
	・

		// 自機の弾と敵機が当たったかどうか
		if(pJikiShotData->vec2.x + 5 > pEnemyData->vec2.x + 13
			&& pJikiShotData->vec2.y + 5 > pEnemyData->vec2.y + 10
			&& pJikiShotData->vec2.x + 2 < pEnemyData->vec2.x + 35
			&& pJikiShotData->vec2.y + 2 < pEnemyData->vec2.y + 25)
		{
			// 爆発を発生させる
			m_pExplosion->Create(pEnemyData->vec2.x + 19, pEnemyData->vec2.y + 17.5f);

			// 自機の弾と敵機を削除
			pJikiShotData = m_pJikiShot->EraseNext(pJikiShotData);
			pEnemyData = m_pEnemy->EraseNext(pEnemyData);
			break;
		}

	・
	・
	・
}


 Screen.h の最初の方で、Explosio.h を忘れずにインクルードしておきます。

Screen.h

//====================================================================
//			ヘッダファイルのインクルード
//====================================================================
#include	"Jiki.h"
#include	"JikiShot.h"
#include	"Enemy.h"
#include	"Touch.h"
#include	"Explosion.h"


 そして、CScreenStage クラスの定義に CExplosion クラスのオブジェクトを追加しておきます。

Screen.h

//====================================================================
//			CScreenStage クラスの定義
//====================================================================
class CScreenStage : public CScreen{
	CJiki			m_Jiki;			// 自機
	CJikiShot		m_JikiShot;		// 自機の弾
	CEnemy			m_Enemy;		// 敵機
	CTouch			m_Touch;		// 当たり判定
	CExplosion		m_Explosion;		// 爆発

	・
	・
	・


 以下のような感じで、コンストラクタで初期化コードを追加しておきます。
m_Touch.SetExplosion と m_Explosion.Init を追加しています。

ScreenStage.cpp

// コンストラクタ
CScreenStage::CScreenStage()
{
	// ファイルパック開始
	g_pFilePack->Begin("Data/Pack0.dat");


	m_Jiki.Init();		// 自機の初期化

	m_JikiShot.SetJikiPos(m_Jiki.GetPos());
	m_JikiShot.Init();	// 自機の弾の初期化

	m_Enemy.Init();		// 敵機の初期化

	// 当たり判定の初期化
	m_Touch.SetJikiShot(&m_JikiShot);
	m_Touch.SetEnemy(&m_Enemy);
	m_Touch.SetExplosion(&m_Explosion);

	m_Explosion.Init();	// 爆発の初期化

	・
	・
	・


 m_Explosion.Move() と m_Explosion.Draw() を必要な箇所で呼び出しておきます

ScreenStage.cpp

// 動作
// 引数、戻値なし。
void CScreenStage::Move(void)
{
	m_Jiki.Move();
	m_JikiShot.Move();
	m_Enemy.Move();

	// 自機の弾と敵機との当たり判定
	m_Touch.JikiShotAndEnemy();

	m_Explosion.Move();
}


// 描画
// 引数、戻値なし。
void CScreenStage::Draw(void)
{
	・
	・
	・

	m_Jiki.Draw();
	m_JikiShot.Draw();
	m_Enemy.Draw();
	m_Explosion.Draw();

	・
	・
	・
}


 ビルド[メイク]して作成されたプログラムは、こちらのページにあります。
 

【スポンサード リンク】


Back Next

0からのゲームプログラミング > アニメーション 2