Tastaturabfragen in AS3

MisterDan

Grünschnabel
Hi Leute,

wenns hier irgendwo schon steht, sagt mir bitte bescheid.

Ich hab ne Klasse die "Ship.as" heisst.

Mein MovieClip der der bereits auf der Bühne ist mit der Klasse verlinkt.
Das klappt auch alles wunderbar mit MouseEvents, etc.

Nur ich würde jetzt meinen MovieClip gerne steuern können.

Ich krieg es einfach nicht hin, ich hoffe ihr wisst was an meinem Code falsch ist.

Code:
package {
	import flash.display.*;
	import flash.events.*;
	
	public class Ship extends MovieClip{
		public function Ship() {
			this.addEventListener(KeyboardEvent.KEY_DOWN, moving);
		}
		public function moving(event:KeyboardEvent):void{
			this.x -= y;
		}
	}
}

Es passiert einfach gar nichts, egal welche Taste man drückt!

Vielen dank schon mal

Mfg
Misterdan
 
Hi und willkommen im Forum,

ich arbeite zwar noch nicht mit AS3.0, aber ich vermute, dass Dir beim Aufruf des Listeners die Referenz auf die lokale Klasseninstanz verloren geht (die Callback-Methode "moving" wird "anonym" und nicht als Member des Objekts aufgerufen) - dieses Problem kenne ich zumindest aus AS2.0.

Lass Die mal "this" per trace in der Funktion "moving" ausgeben - ich vermute, es wird "undefined" ausgegeben.

Ich kann Dir aus dem Stehgreif nicht sagen, wie sich das Problem bei einem EventListener lösen lässt, aber probier mal:
  • eine lokale Variable anzulegen, die auf das aktuelle Objekt verweist:
Code:
class Ship {
  private var ship:Ship;

  public function Ship() {
    ship = this;
    this.addEventListener(KeyboardEvent.KEY_DOWN, moving);
  }

  public function moving():Void {
    ship._x ++;
  }
}
  • Die Methode "moving" explizit als Methode des aktuellen Objekts anzugeben:
Code:
this.addEventListener(KeyboardEvent.KEY_DOWN, this.moving);

Gruß

P.S.: Bitte verwende beim Posten von Code die bbCodes [CODE] oder [ACTIONSCRIPT] - es wird dadurch leserlicher. ;) (ich habe Dein Posting mal entsprechend editiert)
 
Zurück