OpenFL 影片剪辑不允许数组访问

Array access not allowed on OpenFL movieclips

已更新

我该怎么做?

我从 Main.hx 得到这个:

function onMouseOver(e:MouseEvent){
     if(Std.is(e.currentTarget, MovieClip)){
         initializer (cast e.currentTarget,["scaleX",1.5,"scaleY",1.5])
     }
}

那么这就是我动画中的指向函数Class

//here if i set mc:Dynamic everything goes great! but when this one

function initializer(mc:MovieClip, vars:Array<Dynamic>){
       var varsLength:Int = Math.round(vars.length/2);

       for(m in 0...varsLength){

            ini[m] = mc[vars[2*m]];

       }
}

然后编译的时候出现错误:

Error: Array access is not allowed in flash.display.MovieClip

我该如何解决这个问题?

编辑:

vars:是 MovieClip 的属性,例如当我传递这些参数时:

initializer (mcClip1,["scaleX",1.5,"scaleY",1.5])

所以:

vars = ["scaleX",1.5,"scaleY",1.5]

和:

ini[m] will store "scaleX" and "scaleY"`

参考文献:https://groups.google.com/forum/#!topic/haxelang/_hkyt__Rrzw

在 AS3 中,您可以使用 [](数组访问)通过字符串名称访问对象的字段。这叫做反射

在 Haxe,Reflection works differently - you need to make use of the Reflect API

它被认为是不好的做法 - 它不是类型安全的,这意味着编译器可以做很少的事情来帮助您处理错误消息,而且速度也很慢。这就是为什么使用非常明确地表明反射实际上正在进行(而在 AS3 中,这个事实有些隐藏)。 考虑是否有其他不需要反射的方法来解决这个问题。

现在,回到您的示例,这是它在 Haxe 中的样子:

function onMouseOver(e:MouseEvent){
     if (Std.is(e.currentTarget, MovieClip)) {
         initializer(cast e.currentTarget, ["scaleX", 1.5, "scaleY", 1.5])
     }
}

function initializer(mc:MovieClip, vars:Array<Dynamic>) {
       for (m in 0...Std.int(vars.length / 2)) {
            ini[m] = Reflect.getProperty(mc, vars[2*m]);
       }
}

顺便说一句,你的循环 运行 太长了,因为你只使用了数组中一半的值 - 如果你不像我那样将它除以二,你最终会得到 [scaleX, scaleY, null, null] 而不是所需的 [scaleX, scaleY].