2017-05-18 2 views
0

Ich versuche, meine Kind-Klasse namens "Revolver" Zugriff auf die Variablen "leftarrow" und "rightarrow" von der Elternklasse "Spiel", so dass der Turm drehen kann. Der Code kompiliert, aber aus irgendeinem Grund erkennt er nicht die Änderung des Werts der übergeordneten Variablen. Hier ist die Elternklasse:Kind Zugriff auf Variablen des Elternteils

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

    public class Game extends MovieClip 
    { 

     // variables etc 
     public var leftArrow, rightArrow; 


     public function Game() 
     { 
      // add an event listener to spawn a new ship every frame 
      addEventListener(Event.ENTER_FRAME, loop); 
      addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown); 
      addEventListener(KeyboardEvent.KEY_DOWN,keyPressedUp); 

     } 

     function keyPressedDown(event:KeyboardEvent) 
     { 
      if (event.keyCode == 37) // left arrow 
      { 
       leftArrow = true; 
      } 
      if (event.keyCode == 39) // right arrow 
      { 
       rightArrow = true; 
      } 
     } 

     function keyPressedUp(event:KeyboardEvent) 
     { 
      if (event.keyCode == 37) // left arrow 
      { 
       leftArrow = false; 
      } 
      if (event.keyCode == 39) // right arrow 
      { 
       rightArrow = false; 
      } 
     } 

     function loop(e:Event) 
     { 


      // only spawn a ship if there are less than 10 already on screen 
      if (numChildren < 10) 
      { 
       // make a new instance of the Ship class 
       var s = new Ship(); 

       // add the ship to the display list 
       addChild(s); 

       // position and rotate the ship 
       s.x = Math.random() * stage.stageWidth; 
       s.y = Math.random() * stage.stageHeight; 

       s.rotation = Math.random() * 360; 
      } 
     } 
    } 
} 

Und hier ist das Kind Klasse:

package 
{ 

    import flash.display.MovieClip; 
    import flash.events.*; 
    import flash.utils.getTimer; 

    public class Turret extends MovieClip 
    { 

     public function Turret() 
     { 
      addEventListener(Event.ENTER_FRAME, update); 
     } 



     function update(e:Event) 
     { 

      // make the turret move with key presses 
      if (MovieClip(parent).leftArrow) 
      { 
       trace("Made it here"); 
       this.rotation += 5; 
      } 

      if (MovieClip(parent).rightArrow) 
      { 
       this.rotation += 5; 
      } 
     } 
    } 
} 
+0

Sind Sie sicher, dass etwas hat Fokus (versuchen 'stage.focus = this' in deinem Game-Klassenkonstruktor) und dass deine leftArrow & rightArrow vars tatsächlich auf die Tastatur reagieren? – BadFeelingAboutThis

Antwort

0

Das Problem unterschiedlich sein können von dem, was Sie denken. Tastaturereignisse gehen nicht auf beliebige Anzeigeobjekte, sie gehen auf das als interaktiv erkannte Objekt im Fokus. Während es mit der Maus einfacher ist, ist die Tastatur ziemlich kompliziert. Deshalb ist es ein guter Schritt ist Bühne für Tastaturereignisse zu unterzeichnen, weil Stadium ist die Wurzel alle Anzeigebaum und Tastaturereignisse sprudelnden durch sicher passieren:

 public function Game() 
     { 
      if (stage) onStage(); 
      else addEventListener(Event.ADDED_TO_STAGE, onStage); 
     } 

     private function onStage(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, onStage); 

      // add an event listener to spawn a new ship every frame 
      addEventListener(Event.ENTER_FRAME, loop); 

      stage.addEventListener(KeyboardEvent.KEY_UP, keyPressedUp); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown); 

     } 
Verwandte Themen