我一直在AS3中开展一个简单的游戏,但我似乎无法为不同类型的敌人添加动作。到目前为止它只适用于1种敌人类型:
enemyType1是敌人的动画片段。
var enemyType1:EnemyType1 = new EnemyType1(0, 0);
var enemies:Array = new Array();
在我的游戏循环中,我随机产生了敌人,并有一个for循环,循环遍历所有敌人,并为每个敌人执行移动。
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
}
}
除非它不起作用。我无法识别敌人[i]是一个物体。我还研究了每种敌人类型的多维数组,但无法使其发挥作用。
所以问题是,如何检测数组中的特定对象? 或者这完全是控制多种敌人类型的错误方法吗?
感谢。
答案 0 :(得分:0)
如果你想比较班级类型,不要使用“==”但是要使用“是” 可能它会起作用。
if(enemies[i] is EnemyType1)
{
//EnemyType1 Movement
}
else if(enemies[i] is EnemyType2)
{
//EnemyType2 Movement
}
答案 1 :(得分:0)
完成一个非常简单的任务就是制造一个超级敌人Enemy,Enemy1和其他敌人类别。
在Enemy类中,您可以创建一个move()方法,您可以在循环中调用它。
答案 2 :(得分: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();
}