2010-08-15 56 views
0

對於初學者,我只是說我對動作腳本非常陌生,並且我沒有使用Adobe Creative Suite,我將flex作爲記事本用作編譯器。我有兩個類,一個主類和一個名爲OBJECT_square的類。如何更新actionscript中的孩子?

這裏是主類:

package 
{ 

     import flash.display.*;  import mx.core.*;  
     import flash.events.*;  import mx.collections.*; 
     import flash.geom.*;  import mx.controls.*; 
     import flash.text.*;  import mx.events.*; 
            import mx.styles.*; 
            import mx.containers.*; 

     public class MAIN extends Sprite 
     { 
      public var APPLICATION:Application = Application(Application.application); 
      public var keyDownText:TextField = new TextField(); 
      public function MAIN() 
      { 
       stage.addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN); 
       addEventListener(Event.ENTER_FRAME,STEP); 
       this.addChild(new OBJECT_square().CREATE(10,100,1)); 
       this.addChild(new OBJECT_square().CREATE(10,200,1)); 
      } 
      public function STEP():void {} 
      public function DRAW():void {} 
      public function KEY_DOWN(event:KeyboardEvent):void 
      { 
       keyDownText.text = "Key code: " + event.keyCode; 
       this.addChild(keyDownText); 
      } 
     } 
    } 

這裏是OBJECT_square類:

package 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class OBJECT_square extends Sprite 
    { 
     public var X:int = 0; 
     public var Y:int = 0; 
     public var DEPTH:int = 0; 
     public var SPRITE:Sprite = new Sprite(); 
     public function CREATE(X:int,Y:int,DEPTH:int):Sprite 
     { 
      addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN); 
      this.DEPTH = DEPTH; 
      this.X = X; 
      this.Y = Y; 
      DRAW(); 
      return SPRITE; 
     } 
     public function KEY_DOWN(event:KeyboardEvent):void 
     { 
      if (event.keyCode == 39) {X += 1; DRAW();} 
     } 
     public function DRAW():void 
     { 
      SPRITE.graphics.beginFill(0xFF0000,1); 
      SPRITE.graphics.drawRect(X - 10,Y - 10,20,20); 
      SPRITE.graphics.endFill(); 
     } 
    } 
} 

現在我的問題是這樣的。簡單地說,我希望當按下右箭頭鍵時,OBJECT_square繪製的正方形向右移動。現在我只能把它繪製一次(儘管我實際上是在兩個不同的位置創建兩個獨立的方塊)。現在我需要知道的是如果我在OBJECT_square中正確使用了鍵盤事件。我在主類中使用了鍵盤事件以顯示我按下的最後一個鍵,但我不確定如何在除主鍵之外的其他類中使用它。另外我不確定如何「更新」正方形,以便在移動時重繪它,即從顯示列表中刪除舊的自己並重新插入新的自己。整個代碼指向的是廣場是'自給自足的',即包含繪製和移動它所需的所有代碼,而不是依賴任何其他類。我基本上想要這樣做,所以一旦另一個班級做出了正方形,這個正方形就可以獨立完成其他任何事情。

回答

0

您不需要手動重繪正方形。精靈有x和y屬性,您可以更改並自動移動。也沒有理由在已經擴展精靈的類中創建一個精靈。有一對夫婦的其他怪異的東西,你這樣做是你的類的固定的後續版本看起來是這樣的:

package 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class ObjectSquare extends Sprite 
    { 

     public function ObjectSquare (x:int,y:int):void 
     { 
      graphics.beginFill(0xFF0000,1); 
      graphics.drawRect(x,y,30,30); 
      graphics.endFill(); 
      addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN); 

     } 
     public function KEY_DOWN(event:KeyboardEvent):void 
     { 
      if (event.keyCode == 39) 
      { 
       x += 1; 
      } 
     } 

    } 
} 



package 
{ 

     import flash.display.*;  import mx.core.*;  
     import flash.events.*;  import mx.collections.*; 
     import flash.geom.*;  import mx.controls.*; 
     import flash.text.*;  import mx.events.*; 
            import mx.styles.*; 
            import mx.containers.*; 
     //rename your class to Main. Should not be all caps 
     public class Main extends Sprite 
     { 
      public var APPLICATION:Application = Application(Application.application); 
      public var keyDownText:TextField = new TextField(); 
      public function Main() 
      { 
       stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyPress); 
       addChild(new ObjectSquare(10,100)); 
       addChild(new ObjectSquare(10,200)); 
      } 

      public function onKeyPress(event:KeyboardEvent):void 
      { 
       keyDownText.text = "Key code: " + event.keyCode; 
       this.addChild(keyDownText); 
      } 
     } 
    } 

你可能會好起來創建一個類來處理所有的鍵盤輸入,然後改變相關對象。

相關問題