我想添加两个敌人一个数组进行循环,这是我的代码 global_time ++; //生成敌人 if(global_time%40 == 0){ 敌人=新敌人(); enemy.x = 40 + Math.random()* 400; enemy.y = 0; 的addChild(敌人); army.push(敌人); 的System.gc();
enemy2 = new Enemy2();
enemy2.x = 40 + Math.random() * 400;
enemy2.y = 0;
addChild(enemy2);
army.push(enemy2);
}
for (var k:int = army.length - 1; k >= 0; k--) {
enemy = army[k];
enemy2 = army[k]
// update all enemies
enemy.update();
enemy2.update2();
// if its out of bound, remove from stage
if (enemy.y < 0) {
army.splice(k, 1);
enemy.parent.removeChild(enemy);
continue;
System.gc();
}
//* enemy2
if (enemy2.y < 0) {
army.splice(k, 1);
enemy2.parent.removeChild(enemy2);
continue;
System.gc();
}
}
当我运行此程序错误“无法将Enemy2 @ 501f5e1转换为Enemy”时。请帮忙
答案 0 :(得分:0)
问题是你有一支敌人有两种不同类型的敌人,敌人和敌人。
在for循环的开始,你从军队阵列中挑选出k:th敌人。这可能是Enemy或Enemy2对象,但它不能同时存在(除非有一些我们看不到的遗传)。
所以在你的循环中发生的事情是你从军队阵列中挑出最后一个敌人,它是Enemy2类型,然后你将敌人分配给你的变量敌人,这是敌人的类型。这是转换失败的地方。
可能你应该有一个敌人类,并将它用于两个敌人,但如果你想使用两个不同的类,你必须在对敌人进行操作之前进行类型检查:
for (var k:int = army.length - 1; k >= 0; k--) {
if (army[k] is Enemy) {
enemy = army[k];
enemy.update();
if (enemy.y < 0) {
army.splice(k, 1);
enemy.parent.removeChild(enemy);
continue;
System.gc();
}
} else if (army[k] is Enemy2) {
enemy2 = army[k]
enemy2.update2();
if (enemy2.y < 0) {
army.splice(k, 1);
enemy.parent.removeChild(enemy);
continue;
System.gc();
}
}
}
然而,最好的方法是使它们从相同的基类继承,即
class Enemy {
public var x;
public var y;
public function update() {...}
}
class Enemy1 extends Enemy {
override public function update() { // Enemy1 special updates }
}
class Enemy2 extends Enemy {
override public function update() { // Enemy2 special updates }
}