XNA Side Scrolling Shooter - 我怎样才能让子弹携带一个值并在以后引用该值?

时间:2013-03-28 00:16:39

标签: c# xna game-engine

前提:

我正在独立开发一种侧滚动射击游戏,其中涉及一个玩家射击3种不同的子弹类型(我们称之为类型1,类型2和类型3)。玩家在这些子弹类型之间切换以取出不同的敌人(EX:类型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等)。这些子弹中的每一个都有与之相关的相应纹理。

这些单个子弹的射击速度足够快,在屏幕上绘制时看起来像一条实线。

问题:

当玩家射击1型子弹线以杀死2型敌人,然后在1型子弹线与2型敌人碰撞之前将bulletType切换为2型子弹,即使纹理是子弹,子弹也不会发生碰撞子弹类型1。

基本上,当玩家切换bulletTypes时,它会更改屏幕上所有DRAWN子弹的bulletType,而不仅仅是切换bulletType后触发的子弹。我需要让我的子弹携带一个值,我需要能够在玩家输入密钥时动态切换该值。我不确定如何做到这一点。我有一个Bullet类,其构造函数的值为“bulletType”,当玩家按下相应的按钮调用Shoot函数时使用该值。

Bullet Class构造函数:

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时切换。

0 个答案:

没有答案