前提:
我正在独立开发一种侧滚动射击游戏,其中涉及一个玩家射击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时切换。