我在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不熟悉,哈哈,也许这是完全疯狂的,人们会以其他方式做到这一点。
谢谢你的时间!答案 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
是在路径中使用变量的正确方法。