はかせのラボ

私の頭の中を書いていく雑記ブログです

DirectX ボム実装①

あいさつ

どうも、はかせです。
今回から弾幕シューティングとはいえばのボムの実装をしたいと思います。

今回はボムとしての必要最低限の実装が出来ました。

実装したこと

・Xキーを押してボムを使用
・敵の弾の消滅、敵にはダメージ

この2つです。

実装方法

私のプログラムでは全てのオブジェクトは所属するシーンが管理しています。
ボムを使う時にシーンから所属しているオブジェクトの配列を取得し、
その全てに対してボム処理を行います。

ただし以下の条件に当てはまる場合は何も処理をしていません。
・アクティブではない
・自機もしくは自弾であるとき

それではコードを見ていきましょう。

void Player::Bomb()
{
	//シーンに登録されているオブジェクトを取得
	auto gameObjects = mGameObject->GetScene()->GetGameObjects();
	for (auto game : gameObjects)
	{
		//非アクティブなら無視
		if (!game->GetEnable()) continue;
		auto tag = game->GetTag();
		//自機もしくは自弾なら無視
		if (tag == PlayerTag) continue;
		if (tag == PlayerBullet) continue;
		//HPをもっているコンポーネントを取得
		auto gameHaveHP = game->GetComponent<IHP>();
		//HPがあるならダメージを与える
		if (gameHaveHP != nullptr)
		{
			gameHaveHP->Damage(10.0);
		}
		//なければアクティブを切る
		else
		{
			game->SetEnable(false);
		}
	}
}

そして動画です。
youtu.be

まだ何もエフェクトとか付けれてないのでわかりづらいかもですが、
唐突に弾や敵が消える時があると思います。
それがボムを使ったタイミングです。

あとがき

今回はボム実装①でした。
今まで色々実装を自分なりにですが凝ってきたおかげで
変なバグに遭遇することなくここまで実装できました。

これからもこの調子で何もバグが出ず実装が進んだらいいなぁと思っています。
(まぁそんなことは叶わぬ夢であることは知ってますが・・・)

それでは今回はこの辺でノシ

今回作ったものはgithubに上げました
github.com