2014-01-14 46 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個循環,它現在完美的工作,很好的答案,謝謝。 –