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

有没有一种简单的方法可以让电影剪辑在Flash中自我识别?(AS2),flash,actionscript-2,Flash,Actionscript 2,我正在使用ActionScript2.0制作一个非常简单的回合制战斗游戏 我对代码非常陌生,只有非常有限的Visual Basic知识,所以我很高兴地承认我真的不知道自己在做什么。我已经有了一个开始,但我决定重写整个东西,因为我不能轻易地循环敌人和关卡 我已经使用_root.attachMovie两次繁殖了相同的敌人,并将它们识别为Enemy1和Enemy2。在繁殖它们之后,我试图让它们认同: _root.Enemy1.identify = "Enemy1" _root.Enemy1.ident

我正在使用ActionScript2.0制作一个非常简单的回合制战斗游戏

我对代码非常陌生,只有非常有限的Visual Basic知识,所以我很高兴地承认我真的不知道自己在做什么。我已经有了一个开始,但我决定重写整个东西,因为我不能轻易地循环敌人和关卡

我已经使用_root.attachMovie两次繁殖了相同的敌人,并将它们识别为
Enemy1
Enemy2
。在繁殖它们之后,我试图让它们认同:

_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,这样我就不必使用这种方法,或者我的代码有什么问题?

作为一名AS 3程序员,让我添加我所看到的任何解决方案,首先,如果我们想识别电影剪辑的ID或名称,我们应该可以这样说。name

在看到代码之后,我再次感到有点困惑,我们究竟是在调用函数poschange(),还是您以这种方式将其作为我们的参考:


向前看,这个问题的答案是:在AS 3.0中是的。

就我个人而言,我不会以那种方式使用内联函数。我会写一个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)或类似命令?

您要查找的属性是
\u name
。这将包含附加MovieClip时设置的实例名称。

使用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(){..}(写这篇文章感觉很脏)

切换敌人移动的脚本是在它自己的movieclip中处理的,这就是为什么我粗暴地使用了“identify”,以便它知道它实际上必须移动哪个电影剪辑(在我的情况下,比方说,使用同一个敌人两次)。无论如何,非常感谢!这帮了我很大的忙,现在它工作得很好。很高兴它能起作用,但出于很多原因,我也建议你尽最大努力转到AS3。如果你是一个有经验的AS2人,你会发现很难改变,但如果你刚刚开始,出于很多原因,直接进入AS3会更好。它更加标准,并且您使用它编程的方式将非常适合其他语言,比如Javascript和任何其他基于ECMAScript的语言。这也有很大帮助!非常感谢。