2013-08-22 28 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(); 
}