2014-01-14 48 views
0

我在阵列中有一些敌人,他们正在向左和向右移动。 简单代码,更新的敌人位置:移动物体之间的空间

// 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; 

} 

问题:每次当敌人击中左boudary(X < = 50),空间1和2之间的敌人是越来越大。林不擅长的英文解释的事情,所以我在这里上传非常基本的.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

这是因为当moveRight设置为true时,由于敌人[0] .x小于或等于50,敌人[0]已经将其速度设置为-2。

因此,在moveRight设置为true时发生的循环,敌人[0]移动-2个像素,然后将moveRight设置为true,以使所有其他大于零的敌人移动+2。

人去修补,将是移动勾选Loop(只检查第一和最后的敌人)以外方式:

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; 
} 
+0

我给答案添加了一个例子 – imcg

+1

是的,我需要2个循环,它现在完美的工作,很好的答案,谢谢。 –