-1

我正在使用 actionscript 2 在 Flash 中制作一个简单的格斗游戏(我知道 as3 更好,但现在改变不是一种选择,我发誓我的下一个项目将在 as3 中)。

事情是这样的,我有一个“播放器”对象,它在实例化时附加一个名为“player1”或“player2”的影片剪辑,具体取决于给定的参数。正确的实例名称存储在名为 PlayerName 的变量中。例如:

var character:Player = new Player(1);

此代码将创建一个 Player 对象。由于数字“1”,构造函数会将 PlayerName 变量设置为字符串“player1”。最后,构造函数还应该将一个名为“player1”的影片剪辑附加到根目录。

我解决了附加电影剪辑的命名问题:

_root.attachMovie(ID, this["PlayerName"], _root.getNextHighestDepth());

现在有了类似的想法,我想解决以下问题(这是我的问题):假设我想移动我最近生成的电影剪辑(或访问它的任何属性),我如何在路径中使用字符串 PlayerName 到主持人?我的直觉是这样做:

_root.PlayerName._x +=1; 

或者

 _root.(this["PlayerName"])._x +=1;

希望当 flash 编译时,this["PlayerName"] 会变成存储的字符串,但这显然不起作用。我真的被困在这里,我以前一直在 PHP 中这样做,我的意思是,如果这是 PHP,我会使用这个:

_root.$PlayerName._x +=1;

有什么建议么?你怎么能做到这一点?我可以想到一些解决方法,即在附加剪辑时存储对剪辑的引用:

clip = _root.attachMovie(....

然后通过剪辑(clip._x +=1)访问它的属性,但如果我知道如何使用路径中的变量(如 PHP 中的变量)来做到这一点,我会感觉更舒服。不是我太在意,只是在其他情况下,此“剪辑”解决方法可能不起作用。

请记住,我对动作脚本中的 OOP 有点陌生,哈哈,也许这完全是疯狂的,人们会以其他方式这样做。

感谢您的时间!

4

3 回答 3

0

不需要使用“x”,因为这是位置而不是字符 [NAME] 它自己。

  _root.PlayerName._x +=1; //dont need the x value

尝试类似:

     _root.PlayerName +"1"; //from memory should =: PlayerName1

     trace("player"+1);// just type this as a test
于 2012-12-03T06:01:15.630 回答
0

没关系,我找到了方法,无论如何,谢谢。如果其他人遇到同样的疑问,这就是你的做法:

要告诉 flash 您将使用变量内的 STRING 作为路径,您需要使用方括号。现在这可能会有点混乱,至少对我来说,因为当你使用括号时,你不应该使用点。您可能会认为,如果变量名为 PlayerName 并且 de MC 属性的路径是 _root.PlayerName._x ,那么语法将是:

_root.[PlayerName]._x +=1;

但这是错误的并且不起作用。至少这是我迄今为止收集到的。现在,为了让它工作,你需要去掉第一个括号之前的点,第二个之后就可以了。不知道这是否正确,但它似乎确实有效,试一试:

_root[PlayerName]._x +=1;

这确实有效,它访问名为“whatever-is-inside-the-PlayerName-variable”的电影剪辑的 _x 属性并将其递增 1。我发现这令人困惑的原因是因为根之后没有点,它看起来就好像您正在访问 root 变量,就好像它是一个数组一样,这没有任何意义,因为 PlayerName 没有存储在 root 中......无论如何,我不知道如何或为什么,但这似乎有效。希望能帮助到你。

于 2012-12-03T16:51:45.773 回答
0

_root[variableName]._x是在路径中使用变量的正确方法。

于 2015-09-16T13:31:09.750 回答