0

我是 actionscript 3 的新手,将“this”关键字从 as2 转换为 as3 时遇到问题。请帮我!

谢谢 !

我的 as2 代码是:

var selected = MovieClip(null);
j = 1;
while (j++, j <= 11)
{
    var obj_1 = this["shape" + j];
    obj_1.highlight._visible = false;
    obj_1.onPress = function()
    {
        if (_root.selected)
        {
            _root.selected.highlight._visible = false;
        }
        // end if        
        this.highlight._visible = true;
        _root.selected = this;
        trace(this)
    };
}// end while

我的 as3 代码是:

var selecteD = MovieClip(null);

    var j:int = 1;

while (j < 11)
{
    j++;
    var obj_1:MovieClip = this['shape' + j];
    //trace(obj_1);
    obj_1.highlight.visible = false;
    obj_1.addEventListener(MouseEvent.CLICK, pressed);
    function pressed(event:MouseEvent):void
    {

        if (MovieClip(root).selecteD)
        {
            trace(MovieClip(root).selecteD);

            selecteD.highlight.visible = false;
        }

        MovieClip(root).selecteD = **this**;
        MovieClip(root).selecteD.highlight.visible = true;

    }
}

当我追踪这个结果时,结果来自 as3 中的对象主时间线,但在 as2 中它是 level0.shape11

我怎样才能为这个项目转换“这个”。

请帮忙!

4

2 回答 2

0

在 as2 中this是指您将onPress函数添加到的对象,obj1. 在 as3 中this是指定义函数的类/对象,在这种情况下是您的主时间线。在 as3 中,您可以从MouseEvent

while (j < 11)
{
    j++;
    var obj_1:MovieClip = this['shape' + j];
    //trace(obj_1);
    obj_1.highlight.visible = false;
    obj_1.addEventListener(MouseEvent.CLICK, pressed);
    function pressed(event:MouseEvent):void
    {


        if (MovieClip(root).selecteD)
        {
            trace(MovieClip(root).selecteD);

            selecteD.highlight.visible = false;
        }

        var clickedObject:MovieClip = event.currentTarget as MovieClip;
        MovieClip(root).selecteD = clickedObject;
        MovieClip(root).selecteD.highlight.visible = true;

    }
}
于 2013-07-30T07:08:43.577 回答
0

文档说得很好:

对方法的包含对象的引用。当脚本执行时,this关键字引用包含该脚本的对象。在方法体内,this关键字引用包含被调用方法的类实例。

重要的是要注意Function.call()并且Function.apply()仍然存在于 AS3 中,这可能会this在某些情况下改变预期值。

于 2013-07-30T07:14:16.017 回答