0からのゲームプログラミング > 自機の弾 4

Back Next
更新日 2004.02.28
自機の弾 4

 前回、自機の弾を複数個発射させるようにしました。しかし、キーを連打しなければ弾が出ませんよね。もちろん、これでも構わないのですが、個人的にはキーを押し続けている間、弾を発射させたいですね。(腱鞘炎になりますので、、、。)


 JikiShot.cpp で、CJikiShot クラスのメンバ関数 Move に以下の弾を発射させるコードがありました。


JikiShot.cpp <Move メンバ関数の一部>

	if(g_pInput->IsKeyPush(0))
	{
		p = new tagData;

		p->vec2.x = mc_pVec2JikiPos->x + 36;
		p->vec2.y = mc_pVec2JikiPos->y + 16;

		PushBack(p);
	}


 ここで、IsKeyPush を IsKeyDirect に変更して、Zキーを押し続けている間、弾を発射させるように変更してみましょう。CInput クラスの詳細はこちらにありました。


 『なんだ、簡単じゃん。』と思われるかも知れませんが、試してみると面白い現象が起こります。直ぐ『これだけじゃ駄目だ。』と、予想された方も多いことと思います。


 そうです。Zキーを押し続けていると、フレーム毎に [ 60分の1秒につき1個 ] 弾が発射されますね。(^^;.... これではちょっとアレですので、間隔を空けるようにしてみます。


 CJikiShot クラスにメンバ変数を一つ追加します。ここでは、m_unInterval というメンバ変数名にしてみました。


JikiShot.h <CJikiShot クラスの定義の一部>

	・
	・
	・

	CTexture		m_Texture;		// テクスチャ
	RECT			m_Rect;			// テクスチャの範囲指定
	const D3DXVECTOR2	*mc_pVec2JikiPos;	// 自機の位置(x座標, y座標)
	unsigned int		m_unInterval;		// 弾発射間隔
public:

	・
	・
	・


 そして、忘れないうちにコンストラクタで初期値を代入しておきます。


JikiShot.cpp <CJikiShot クラスのコンストラクタ>

// コンストラクタ
CJikiShot::CJikiShot()
{
	m_pHead = NULL;
	m_pTail = NULL;

	m_unInterval = 0;
}


 先程の Move メンバ関数を少し変更します。m_unInterval を 1 ずつカウントアップさせ、m_unInterval が 10 以上で、かつ、Zキーが押されている場合に限り弾を発射させるようにしています。最後に、弾を発射させた場合には、m_unInterval を 0 に戻すのを忘れずに。

 また、10 という数値は適当に決めたものであり、ゲームに応じて変更して下さいね。


JikiShot.cpp <Move メンバ関数の一部>

	if(++m_unInterval >= 10 && g_pInput->IsKeyDirect(0))
	{
		m_unInterval = 0;

		p = new tagData;

		p->vec2.x = mc_pVec2JikiPos->x + 36;
		p->vec2.y = mc_pVec2JikiPos->y + 16;

		PushBack(p);
	}


 今回の内容のプログラムは、こちらのページにあります。前半の内容のプログラムは、Vol51_1.exe で、後半のものは Vol51_2.exe となっております。


コラム - バックアップを取ろう

 皆さん、バックアップはしていますか。ハードディスクは結構故障し易いパーツです。万が一の為に、定期的にバックアップを取るように心掛けましょう。プログラミングする頻度が多くなれば、出来れば毎日でもしておきたいものです。これは、自分自身を守る為です。クリエイターなら、皆している筈です。

 マイ ドキュメント、メール、お気に入り、デスクトップ、etc.
 

【スポンサード リンク】


Back Next

0からのゲームプログラミング > 自機の弾 4