使用字符串变量作为访问AS 2中其他变量的路径

时间:2012-12-03 04:00:24

标签: flash path actionscript-2

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

事情就是这样,我有一个“播放器”对象,根据给定的参数,在实例化时附加名为“player1”或“player2”的动画片段。正确的实例名称存储在名为PlayerName的变量中。例如:

var character:Player = new Player(1);

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

我解决了附加的动画片段的命名:

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

现在有了类似的想法,我想解决以下问题(这是我的问题):说我想移动我最近生成的movieclip(或访问它的任何属性),我如何使用字符串PlayerName MC的路径?我的直觉是这样做:

_root.PlayerName._x +=1; 

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

希望在编译flash时,这个[“PlayerName”]会变成存储的String,但这显然不起作用。我真的被困在这里,我曾经在PHP中一直这样做,我的意思是,如果这是PHP我会用它:

_root.$PlayerName._x +=1;

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

clip = _root.attachMovie(....

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

请记住,我在行动剧本中对OOP不熟悉,哈哈,也许这是完全疯狂的,人们会以其他方式做到这一点。

谢谢你的时间!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

没关系,我发现了怎么做,谢谢。如果有其他人遇到同样的疑问,那么你就是这样做的:

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

_root.[PlayerName]._x +=1;

但这是错误的,不起作用。至少这是我到目前为止收集的内容。现在,为了使它工作,你需要在第一个支架之前摆脱点,在第二个支架之后它没关系。不确定这是否正确,但似乎确实有效,试一试:

_root[PlayerName]._x +=1;

这确实有效,它访问名为“what-is-inside-the-PlayerName-variable”的movieclip的_x属性并将其递增1.我发现这种混淆的原因是因为因为根后没有点,看起来好像你正在访问根变量,就像它是一个数组一样,这没有任何意义,因为PlayerName没有存储在root中....无论如何,我不知道怎么样或为什么,但是这个出现了上班。希望它有所帮助。

答案 2 :(得分:0)

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