有没有一种简单的方法可以让电影剪辑在Flash中识别自己? (AS2)

时间:2011-05-13 12:11:08

标签: flash actionscript-2

我正在使用ActionScript 2.0制作一个非常简单的回合制游戏。

我对代码非常陌生,只有非常有限的Visual Basic知识,所以我很高兴地承认我并不知道我在做什么。我有一个开始,但我决定改写整个事情因为我不能轻易地循环敌人和等级。

我使用_root.attachMovie两次产生同一个敌人,并将其识别为Enemy1Enemy2。产卵后,我试图让他们认同自己:

_root.Enemy1.identify = "Enemy1"
_root.Enemy1.identify = "Enemy1"

使用调试器,这显然有效(在movieclip中,它们有一个名为identify的变量,它正确地标记它们),但是当我尝试使用if语句以便我可以将它们放在各自的位置时,它只是不行;它直接掠过。我在影片剪辑中的代码是:

 if (identify == "Enemy1") {

    function poschange() {

        _root.Enemy1._x = _root.Enemy1.POSX;

        _root.Enemy1._y = _root.Enemy1.POSY;

        _root.Enemy1.swapDepths(_root.Enemy1.POSY);

    }

} else if (identify == "Enemy2") {

    function poschange() {

        _root.Enemy2._x = _root.Enemy2.POSX;

        _root.Enemy2._y = _root.Enemy2.POSY;

        _root.Enemy2.swapDepths(_root.Enemy2.POSY);

    }

}

poschange();

poschange函数适用于玩家角色,只有这个if语句才能识别哪个敌人明显失败。

是否有更简单的方法让影片剪辑识别自己的ID,所以我不必使用这种方法,或者我的代码是否有问题?

4 个答案:

答案 0 :(得分:2)

就个人而言,我不会以这种方式使用内联函数。我会写一个接收敌人的poschange函数,就像这样,

function poschange(enemy) {
    enemy._x = enemy.POSX;
    enemy._y = enemy.POSY;
    enemy.swapDepths(enemy.POSY);
}

你可以用你的if语句来称呼它,

if (identify == "Enemy1") {
    poschange(_root.Enemy1);
}
else if(identify == "Enemy2") {
    poschange(_root.Enemy2);
}

但这可能不一定是,也不一定能解决你的问题。在if语句时,您从哪里获得'身份'属性?如果你从一个真正的敌人对象那里得到它,为什么不忘记if语句并运行poschange(curEnemy)或者类似的?

答案 1 :(得分:1)

您正在寻找的属性是_name。这将包含您在附加MovieClip时设置的实例名称。

答案 2 :(得分:0)

作为一名AS 3程序员,我自己允许添加我认为的解决方案,首先,如果我们想要识别MovieClip的ID或名称,我们应该能够说出像this.name。

在看到代码之后,如果我们实际调用函数poschange()或者以这种方式为我们的引用提供它,我会有点困惑。 :

提出问题的答案是:在AS 3.0中是。

答案 3 :(得分:0)

使用root是非常糟糕的做法,但为什么不这样做呢?

if (identify == "Enemy1") {

            _root.Enemy1._x = _root.Enemy1.POSX;

            _root.Enemy1._y = _root.Enemy1.POSY;

            _root.Enemy1.swapDepths(_root.Enemy1.POSY);

    } else if (identify == "Enemy2") {

            _root.Enemy2._x = _root.Enemy2.POSX;

            _root.Enemy2._y = _root.Enemy2.POSY;

            _root.Enemy2.swapDepths(_root.Enemy2.POSY);

    }

如果你想按照自己的方式去尝试_root.postchange = function(){..}(觉得写得很脏)