前提:
私は、プレイヤーが 3 種類の弾丸 (タイプ 1、タイプ 2、タイプ 3 と呼びます) を撃つ、横スクロール シューティング ゲームを独自に開発しています。プレーヤーは、これらの弾丸の種類を切り替えて、さまざまな敵を倒します (例: タイプ 1 の弾丸はタイプ 2 の敵を倒し、タイプ 2 の弾丸はタイプ 1 の敵を倒します)。
私の Game1.cs では、Update メソッドの下に、敵ごとに簡単な回避策があります。弾丸の種類が x の場合、弾丸は敵と衝突し、特定の種類の弾丸に弱い場合はダメージを与えます。 そのためのコード:
//PlayerBullet vs Enemy
for (int i = 0; i < player.bulletList.Count; i++)
{
if (player.bulletType == 1)
{
if (player.bulletList[i].hitBox.Intersects(e.hitBox))
{
//destroy bullet and damage ship
player.bulletList[i].isVisible = false;
e.isVisible = false;
//Score
hud.playerScore += 20;
//Explosion
explosionList.Add(new Explosion(Content.Load<Texture2D>("explosion3"), new Vector2(e.position.X, e.position.Y)));
//Sound
sm.explodeSound.Play();
}
}
}
player クラスでは、テンキーを押すことで弾の種類を切り替えます (Num1 = bulletType 1、Num2 = bulletType2 など)。これらの各弾丸には、対応するテクスチャが関連付けられています。
これらの個々の弾丸の発射速度は、画面に描画すると実線のように見えるほど高速です。
問題:
プレイヤーが Type 1 Bullets のラインを発射して Type 2 Enemies を倒し、Type 1 Bullets のラインが Type 2 Enemies と衝突する前に bulletType を Type 2 Bullets に切り替えた場合、テクスチャが Bullet Type であっても、弾丸は衝突しません。 1.
基本的に、プレイヤーが bulletType を切り替えると、bulletType を切り替えた後に発射された弾丸だけでなく、画面上のすべての描画された弾丸の bulletType が変更されます。弾丸に値を持たせる必要があり、プレイヤーがキーを入力するたびにその値をオンザフライで切り替えることができる必要があります。これを行う方法がわかりません。コンストラクターが「bulletType」の値を取る Bullet クラスがあります。これは、プレーヤーが対応するボタンを押して Shoot 関数が呼び出されたときに使用されます。
Bullet クラスのコンストラクタ:
public Bullet(Texture2D newTexture, int newBulletType)
{
velocity = 10;
texture = newTexture;
isVisible = false;
bulletType = newBulletType;
}
シュート機能:
public void ShootYellow()
{
//Shoot only when delay resets
if (bulletDelay >= 0)
bulletDelay--;
//Create bullet at delay zero on player
if (bulletDelay <= 0)
{
//Sound Effect
//sm.playerShootSound.Play();
Bullet newBullet = new Bullet(bulletYellowTexture, bulletType); //Create Bullet
newBullet.position = new Vector2(position.X + 6 - newBullet.texture.Width / 2, position.Y + 30); //Spawn location of bullet
//Make bullet visible
newBullet.isVisible = true;
//Add bullet to list
if (bulletList.Count() < 256)
bulletList.Add(newBullet);
}
//reset delay
if (bulletDelay == 0)
bulletDelay = 0;
}
少なくとも、描画されたすべてのテクスチャを bulletType スイッチで更新したいと思います。描画されたすべての弾丸テクスチャが、現在選択されている bulletType で切り替わるようにします。