2013-07-30 66 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在某些情況下,預期值是非常重要的。