OpenFL movieclips上不允许阵列访问



UDATED

我该怎么做?

我从Main.hx:得到的

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

这就是我的动画类中的指向函数

//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]];
       }
}

然后当我编译它时,出现一个错误:

错误: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"`

X参考:https://groups.google.com/forum/#!topic/haxelag/_hkyt_Rzw

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

在Haxe中,Reflection的工作方式不同——您需要使用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]

最新更新