我增加了一个专门用于导弹的课程。代码如下所示:
class Missile
{
Vector2 Position;
public Missile(int XInitialPos, int YInitialPos)
{
Position = new Vector2(XInitialPos, YInitialPos);
}
public void Move()
{
Position.Y = Position.Y - 8;
}
public void MoveMissile()
{
Position.Y = Position.Y + 8;
}
public Vector2 GetPosition()
{
return Position;
}
}
我知道如何调用移动方法来使发射器射击,但是,我不知道如何随机调用一些东西以使入侵者射击。任何帮助,将不胜感激。谢谢。
code which invokes launcher to shoot in the update method:
if (MissileFired != null && MissileFired.GetPosition().Y < 20) MissileFired = null;
if (Keyboard.GetState().IsKeyDown(Keys.Space) && MissileFired == null)
{
MissileFired = new Missile(LauncherXPos, 650);
}
答案 0 :(得分:2)
您可以向入侵者添加一个名为ShouldShootMissile
的方法。它应该将您的游戏时间表示为参数(可能是double
或XNA GameTime
对象)。此函数将返回bool
。
也许是这样的:
Random rand = new Random();
double lastMissileFired = 0d;
private bool ShouldFireMissile(double time)
{
double fixedDelay = 500d;
double firingProbability = 0.1d
if (time - lastMissileFired < fixedDelay)
return false;
if (rand.NextDouble() > firingProbability)
return false;
lastMissileFired = time;
return true;
}
警告,上面的代码可能有很多问题,几乎肯定不能完全适合你的程序,但希望能让你更清楚地了解我的意思。我决定将250ms可变延迟更改为它将触发的概率。
您将在每次更新入侵者时运行上面的代码
if (invader.ShouldFireMissile())
invader.FireMissile();