0

我在手机上使用 Actionscript 2.0,无法理解事件。

我正在使用我的所有代码创建一个类对象并使用一组函数(全部作为该类的直接第一级子级)。有一个函数可以创建一个带有正方形的 Movieclip,并将 onPress 事件设置为另一个名为 hit 的函数:

public function draw1Sqr(sName:String,pTL:Object,sSide:Number,rgb:Number){
    // create a movie clip for the Sqr
        var Sqr:MovieClip=this.canvas_mc.createEmptyMovieClip(sName,this.canvas_mc.getNextHighestDepth());
    // draw square
        Sqr.beginFill(rgb); 
        //etc  ...more lines        

    //setup properties (these are accessible in the event)
        Sqr.sSide=sSide;
        Sqr.sName=sName; 

    //setup event
        Sqr.onPress = hit; // this syntax seems to lead to 'this' within
                            // the handler function to be Sqr (movieclip)

        //Sqr.onPress = Delegate.create(this, hit); 
        //I've read a lot about Delegate but it seems to make things harder for me.
    }



然后在我的事件处理程序中,我无法获得正确的范围......

public function hit(){
    for (var x in this){
        trace(x + " == " + this[x]);
    }
            //output results
                //onPress == [type Function]
                //sName == bSqr_7_4
                //sSide == 20

    trace(eval(this["._parent"])); //undefined
    trace(eval(this["._x"])); //undefined

}

出于某种原因,虽然范围设置为调用对象(Sqr,Movieclip)并且我可以访问我定义的属性,但我不能使用 Movieclip 对象的“本机”属性。

关于如何访问被按下的 Movieclip 对象的 _x、_y 和其他属性的任何建议。

4

1 回答 1

0

使用数组访问器或点访问器,但不能同时使用。例如:

trace(this._parent); // OR
trace(this["_parent"]);

至于你的迭代结果,我记得 AS2 在这方面很糟糕。使用 for ... in 循环时,IIRC 仅返回动态属性。当您想要的只是您自己设置的键/值对时,这可以防止对象(通常用作哈希映射)包含它们的本机属性。

此外 - eval() 函数很容易被过度使用。除非您绝对必须执行您在编译时没有的 AS2 字符串,否则我建议您避免使用它。快乐编码!

于 2012-01-31T15:14:11.630 回答