我在阵列中有一些敌人,他们左右移动。 更新敌人位置的简单代码:
// when the game starts, moveRight is true
var moveRight:Boolean = true;
for (var i:int = 0; i < enemies.length; i++)
{
if(moveRight)
{
// they are moving right
enemies[i].vx = 2;
}
else
{
// they are moving left
enemies[i].vx = -2;
}
// limit movement
if (enemies[i].x >= 550)
{
moveRight = false;
}
else if (enemies[i].x <= 50)
{
moveRight = true;
}
// move enemies
enemies[i].x += enemies[i].vx;
}
问题:每当敌人击中左边时(x <= 50),敌人之间的空间越来越大。我不擅长用英语解释事情,所以我在这里上传了非常基本的.swf示例:
http://www.fastswf.com/GXKix5s
只要看看左侧敌人发生的事情。
我可以通过添加一行代码来解决这个问题(下面是新代码) 在if-else语句中:
if (enemies[i].x >= 550)
{
moveRight = false;
}
else if (enemies[i].x <= 50)
{
moveRight = true;
// NEW CODE
enemies[i].x += 2;
}
即使有多行也可以使用,你可以在这里看到
http://www.fastswf.com/icsom6A
所以问题是导致问题的原因是什么? 每当他们从左到右改变方向时,为什么敌人之间的空间会变大? 如果我向后循环troguh数组,我在右侧有问题,而不是离开。
答案 0 :(得分:0)
正在发生这种情况,因为当moveRight设置为true时,由于敌人[0] .x小于或等于50,敌人[0]已将其速度设置为-2。
所以在moveRight设置为true时发生的循环中,敌人[0]被移动-2像素,然后将moveRight设置为true,以便大于零的所有其他敌人移动+2。
修复它的一种方法是将检查移到循环外部(仅检查第一个和最后一个敌人):
for (var i:int = 0; i < enemies.length; i++)
{
if(moveRight)
{
// they are moving right
enemies[i].vx = 2;
}
else
{
// they are moving left
enemies[i].vx = -2;
}
// move enemies
enemies[i].x += enemies[i].vx;
}
// limit movement
if (enemies[enemies.length-1].x >= 550)
{
moveRight = false;
}
else if (enemies[0].x <= 50)
{
moveRight = true;
}
另一个可能是两个循环:
for (var i:int = 0; i < enemies.length; i++)
{
// limit movement
if (enemies[i].x >= 550)
{
moveRight = false;
}
else if (enemies[i].x <= 50)
{
moveRight = true;
}
}
for (var i:int = 0; i < enemies.length; i++)
{
if(moveRight)
{
// they are moving right
enemies[i].vx = 2;
}
else
{
// they are moving left
enemies[i].vx = -2;
}
// move enemies
enemies[i].x += enemies[i].vx;
}