我正在使用ActionScript 2.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,所以我不必使用这种方法,或者我的代码是否有问题?
答案 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(){..}(觉得写得很脏)