我正在尝试遍历一个子弹阵列,以便设置每个子弹的位置,延迟为0.3秒。
FireTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (kbState.IsKeyDown(Keys.Space) && FireTimer > FireRate)
{
for (int i = 0; i < bullets.Count(); i++)
{
if (bullets[i].IsAlive == false)
{
bullets[i].IsAlive = true;
bullets[i].position = position;
FireTimer = 0f;
}
}
}
我的FireTimer被赋值为0.0f,FireRate被赋值为0.3f。
当我调用此方法时,所有项目符号都被绘制并给出相同的位置。任何人都可以告诉我需要做些什么来让他们以0.3秒的间隔定位在这个位置?
答案 0 :(得分:0)
当按键关闭时,您正在检查firetimer,然后迭代整个阵列并触发每个子弹。您将需要一个变量来存储剪辑中的当前索引,然后在每次触发子弹时将其递增。
int clipIndex = 0;
...
FireTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (kbState.IsKeyDown(Keys.Space) && clipIndex < bullets.Count() FireTimer > FireRate)
{
if (bullets[clipIndex].IsAlive == false)
{
bullets[i].IsAlive = true;
bullets[i].position = position;
FireTimer = 0f;
}
clipIndex++;
}
然后可以通过将索引更改回0来重新加载;另一件需要注意的事情,如果子弹的旗帜IsAlive是真的,那么这个错过了单帧的火力。如果你想找到下一个活着的子弹你可以做一会儿声明:
while (bullets[clipIndex].IsAlive && clipIndex < bullets.Count())
clipIndex++;
if (clipIndex < bullets.Count())
...
if语句会发生变化,因为你知道clipIndex将是一个没有活着的项目符号的索引,但你确实想确保它有一颗子弹。