2010-02-12 90 views
0

我知道我做錯了一些事情。在我的控制中,我有控制我的英雄的keydown事件。截至目前,我正試圖旋轉我的英雄,但他拒絕轉身。以下是我的英雄類,我的控制類和gameobject類。幾乎所有的類都與控件類相關聯。無法訪問flashDevelop中的MovieClip屬性

package com.Objects 
{ 
    import com.Objects.GameObject; 
    /** 
    * ... 
    * @author Anthony Gordon 
    */ 

    [Embed(source='../../../bin/Assets.swf', symbol='OuterRim')] 
    public class Hero extends GameObject 
    { 

     public function Hero() 
     { 

     } 

    } 

} 

這是我的Controls類。這是我試圖旋轉我的英雄的班,但他沒有。 keydown事件確實有效,因爲我追蹤它。

package com.Objects 
{ 
    import com.Objects.Hero; 
    import flash.events.*; 
    import flash.display.MovieClip; 
    /** 
    * ... 
    * @author Anthony Gordon 
    */ 
    public class Controls extends GameObject 
    { 
     private var aKeyPress:Array; 
     public var ship:Hero; 

     public function Controls(ship:Hero) 
     { 
      this.ship = ship; 
      IsDisplay = false; 
      aKeyPress = new Array(); 
      engine.sr.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); 
      engine.sr.addEventListener(KeyboardEvent.KEY_UP,keyUpListener); 
     } 

     private function keyDownListener(e:KeyboardEvent):void { 
      //trace("down e.keyCode=" + e.keyCode);   
      aKeyPress[e.keyCode] = true; 
      trace(e.keyCode); 
     } 

     private function keyUpListener(e:KeyboardEvent):void { 
      //trace("up e.keyCode=" + e.keyCode); 
      aKeyPress[e.keyCode]=false; 
     } 

     override public function UpdateObject():void 
     { 
      Update(); 
     } 

     private function Update():void 
     { 
      if (aKeyPress[37])//Key press left 
       ship.rotation += 3,trace(ship.rotation); ///DOESNT ROtate  
     }//End Controls 

    } 

} 

這裏是遊戲對象類

package com.Objects 
{ 
    import com.Objects.Engine; 
    import com.Objects.IGameObject; 
    import flash.display.MovieClip; 
    /** 
    * ... 
    * @author Anthony Gordon 
    */ 
    public class GameObject extends MovieClip implements IGameObject 
    { 
     private var isdisplay:Boolean = true; 
     private var garbage:Boolean; 
     public static var engine:Engine; 
     public var layer:Number = 0; 

     public function GameObject() 
     { 

     } 

     public function UpdateObject():void 
     { 

     } 
     public function GarbageCollection():void 
     { 

     } 
     public function set Garbage(garb:Boolean):void 
     { 
      garbage = garb; 
     } 
     public function get Garbage():Boolean 
     { 
      return garbage 
     } 
     public function get IsDisplay():Boolean 
     { 
      return isdisplay; 
     } 
     public function set IsDisplay(display:Boolean):void 
     { 
      isdisplay = display; 
     } 

     public function set Layer(l:Number):void 
     { 
      layer = l; 
     } 
     public function get Layer():Number 
     { 
      return layer 
     } 

    } 

} 
+0

我猜你已經來自C/C++/C#背景?在包名,方法和getter/setter中看到大寫字母非常陌生。只有我看到在AS3環境中有一個C#編碼員涉獵了。 – WORMSS 2011-09-16 16:01:41

回答

0

看起來你keyUpListenerkeyDownListener方法不調用UpdateObject功能。

+0

我和Ross在一起,我會確認engine.sr實際上正在調度事件..也不依賴Bubbling? – WORMSS 2011-09-16 16:03:58

0

嘗試在stage而不是engine.sr(不知道那是什麼)

聆聽您KeyboardEvent如果你把它們放在比臺上其他任何你需要點擊特定的事情先說說它集中了活動工作。

此外,該行:

ship.rotation += 3,trace(ship.rotation); 
Control

看起來有點破。

+0

我認爲這條線相同,但事實證明它是有效的語法。根本沒有想法。 – 2010-02-15 16:14:49

+0

是的,它的有效性,我使用相同的技術,我真的很少使用for循環。 'for(var i:uint = 0,len:uint = myArray.length; i WORMSS 2011-09-16 15:58:12