2013-08-22 54 views
0

我一直在AS3上做一個簡單的遊戲,但我似乎無法爲不同類型的敵人增加運動。到目前爲止,它只適用於1種敵人類型:AS3 - 控制不同敵人類型的敵人行爲

enemyType1是敵人的動畫片段。

var enemyType1:EnemyType1 = new EnemyType1(0, 0); 
var enemies:Array = new Array(); 

而且在我的遊戲圈,筆者隨機產卵的敵人,並有一個循環,它通過所有的敵人循環,並執行對每個敵人的移動。

if(Math.random() < 0.5) 
{ 
    var newEnemyType1 = new EnemyType1(0, 0); 
    enemies.push(newEnemyType1); 
    addChild(newEnemyType1); 
} 

for (var i:int = 0; i < enemies.length; i++) 
{ 
    //Movement 
} 

問題出現在創建不同類型的敵人並確定敵人是哪種敵人類型時,以便使用正確的移動類型。這將成爲:

var enemyType1:EnemyType1 = new EnemyType1(0, 0); 
var enemyType2:EnemyType2 = new EnemyType2(0, 0); 
var enemies:Array = new Array(); 

而且在遊戲循環:

if(Math.random() < 0.5) 
{ 
    var newEnemyType1 = new EnemyType1(0, 0); 
    enemies.push(newEnemyType1); 
    addChild(newEnemyType1); 
    var newEnemyType2 = new EnemyType2(0, 0); 
    enemies.push(newEnemyType2); 
    addChild(newEnemyType2); 
} 

for (var i:int = 0; i < enemies.length; i++) 
{ 
    if(enemies[i] == EnemyType1) 
    { 
     //EnemyType1 Movement 
    } 
    else if(enemies[i] == EnemyType2) 
    { 
     //EnemyType2 Movement 
    } 
} 

除非它不工作。我無法識別敵人[我]是一個物體。我也研究過每種敵人類型的多維陣列,但無法使其工作。

所以問題是,我如何檢測數組中的特定對象?或者這是完全錯誤的方式去控制多種敵人類型?

謝謝。

回答

0

如果你想比較類的類型,不使用「==」,但使用「是」。
可能它會工作。

if(enemies[i] is EnemyType1) 
{ 
    //EnemyType1 Movement 
} 
else if(enemies[i] is EnemyType2) 
{ 
    //EnemyType2 Movement 
} 
+0

咄!由於效率的原因,我決定使用switch語句,而使用getQualifiedClassName。謝謝。 – Effsy

0

這是一個非常簡單的任務,簡單地通過製造一個超級敵人,敵人1和其他敵人類擴展完成。

在Enemy類中,您可以創建move()方法,您可以在循環中調用該方法。

0

嘗試使用抽象類和繼承:

// Abstract enemy class 
public class AEnemy() 
{ 
    public function Move():void 
    { 
     // standard move code here 
    } 
} 

// Concrete enemy class. Inherits Move code 
public class EnemyOne() extends AEnemy 
{ 

} 

// Concrete enemy class two, overrides inherited movement code with it's own. 
public class EnemyTwo() extends AEnemy 
{ 
    override public function Move():void 
    { 
     // Different move code here 
    } 
} 

/* ---- In controller ---- */ 

// typed array of enemies, can contain anything that extends AEnemy. 
// Will also see them only as an 'AEnemy' 
private var _enemies:Vector.<AEnemy> = new Vector.<AEnemy>(); 

// update loop 
for (i = 0; i < l; i++) 
{ 
    // Move code is handled internally by the enemy classes themselves 
    _enemies[i].Move(); 
}