我是 XNA Game Studios 的初学者,想学习一些游戏编程的基础知识。我目前正在创建一个小型太空射击游戏,类似于 Space Invaders 的变体。
为了让我的火箭看起来更好,我创建了一些烟雾轨迹来跟踪它们,但想在一段时间(400 毫秒)后将它们移除,这样屏幕就不会被烟雾阻挡。为了实现这一点,我创建了以下代码,这对我来说似乎很合乎逻辑。
for(int i=0; i < rocketPosition.Count; i++)
{
rocketPosition[i] = new Vector2(rocketPosition[i].X, rocketPosition[i].Y - rocketSpeed);
Vector2 smokePosition = rocketPosition[i];
smokePosition.X += Rocket.Width / 2 + smokeTexture.Width / 2 + randomizer.Next(10) - 5;
smokePosition.Y += Rocket.Height + randomizer.Next(10) - 5;
smokeList.Add(new Particle(smokePosition, gameTime.TotalGameTime.Milliseconds));
if (rocketPosition[i].Y < 0 - Rocket.Height)
{
rocketPosition.RemoveAt(i);
}
}
for(int i = 0; i < smokeList.Count; i++)
{
if (smokeList[i].Time < gameTime.TotalGameTime.Milliseconds - smokeDuration)
{
smokeList.RemoveAt(i);
}
}
Particle 是我创建的一个类,目的是获得列表项(代表烟雾粒子)的创建时间及其位置 Vector2。
然而,它并没有从下到上删除烟雾轨迹,而是停在两者之间,如下图所示:
我希望有人可以帮助我编写代码。