在一个阵列AS3中添加两个敌人

时间:2014-10-31 01:31:57

标签: actionscript-3 flash

  

我想添加两个敌人一个数组进行循环,这是我的代码       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”时。请帮忙

1 个答案:

答案 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 }
}