前提:
我正在独立开发一款横向卷轴射击游戏,其中涉及玩家射击 3 种不同类型的子弹(我们将它们称为 1 型、2 型和 3 型)。如果有意义的话,玩家可以在这些子弹类型之间切换以消灭不同的敌人(例如:1 型子弹杀死 2 型敌人;2 型子弹杀死 1 型敌人)。
在我的 Game1.cs 中,在 Update 方法下,我为每个敌人提供了一个简单的解决方法,如果 bulletType = 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();
}
}
}
在播放器类中,通过按数字键盘键来切换子弹类型(Num1 = bulletType 1,Num2 = bulletType2 等)。这些子弹中的每一个都有与之关联的相应纹理。
这些单个子弹的射速足够快,在屏幕上绘制时看起来像一条实线。
问题:
当玩家射出一排 Type 1 Bullets 杀死 Type 2 Enemies,然后在 Type 1 Bullets 与 Type 2 Enemies 碰撞之前将 bulletType 切换为 Type 2 Bullets,即使纹理为 Bullet Type,子弹也不会碰撞1.
基本上,当玩家切换子弹类型时,它会更改屏幕上所有绘制的子弹的子弹类型,而不仅仅是切换子弹类型后发射的子弹。我需要让我的子弹带有一个值,并且我需要能够在玩家输入键时即时切换该值。我不确定如何做到这一点。我有一个 Bullet 类,其构造函数的值为“bulletType”,当玩家按下相应按钮调用 Shoot 函数时使用该值。
子弹类构造函数:
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 开关进行更新。这样所有绘制的子弹纹理都会切换到当前选择的子弹类型。