2013-07-30 65 views
0

我是非常新的动作3我有一个问题,将“this”关键字从as2转换为as3。 请帮帮我!将“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它是0级。 shape11

我怎么能把这个转换成这个项目。

请帮忙!

回答

0

in as2 this指的是您将onPress函数添加到obj1的对象。 in 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; 

    } 
} 
+0

谢谢! Marijn它的工作 –

0

documentation话它顺利拿到点击的对象:

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

需要注意的是Function.call()Function.apply()仍然存在于AS3,它可以改变的this在某些情况下,预期值是非常重要的。