0

前提:

我正在独立开发一款横向卷轴射击游戏,其中涉及玩家射击 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 开关进行更新。这样所有绘制的子弹纹理都会切换到当前选择的子弹类型。

4

0 回答 0