AS3 Tastatur-Ereignisse, die innerhalb einer Klasse?
Ich scheine Schwierigkeiten haben, ein Tastatur-Ereignis in einer Klasse zu arbeiten, habe ich ein ENTER_FRAME-Ereignis, welches einwandfrei funktioniert, aber die Tastatur-Ereignis wird nie genannt. Irgendwelche Ideen? hier ist der code
package
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.*;
public class mainGame extends MovieClip
{
var myPlayer:player = new player();
function mainGame():void
{
trace("arg!");
addChild(myPlayer);
addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
addEventListener(Event.ENTER_FRAME, update);
}
function keyDown(evt:KeyboardEvent):void
{
trace("This never happens");
myPlayer.x++;
}
function update(evt:Event):void
{
trace("This happens fine");
}
}
}
vielen Dank im Voraus!
InformationsquelleAutor Matt | 2009-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anders als in AS2, AS3 Tastatur-Ereignisse sind nicht global. Sie sind ausgestellt auf die Bühne, und Sie sprudeln durch die Liste Anzeige was auch immer Anzeige Objekt den Fokus hat. In Ihrem code, Ihrem Ereignis-listener Hinzugefügt wird
mainGame
, so ist es nur noch Feuer, wennmainGame
auf der Bühne, und der Benutzer geklickt hat (oder Maus-overed ich vergessen) diemainGame
MovieClip.Wenn Sie möchten, um Tastatur-Ereignisse weltweit, wie ich sagte, Sie alle beginnen mit dem Stadium, bevor Sie blubbern, also, wenn Sie sich für Veranstaltungen anmelden, mit der Bühne, erhalten Sie alle Tastatur-Ereignisse. So wie kekoav sagte, die Art und Weise zu tun, ist
Aber, Ihr problem ist, dass
stage
im code ist keine Globale variable. Es ist eine Eigenschaft, die gemeinsam für alle DisplayObjects neu, aber es ist null, bis das Objekt der Anzeigeliste Hinzugefügt.So zu Dosieren, mit den Erklärungen, der obige code funktioniert, wenn Sie es nennen nach
mainGame
Hinzugefügt wurde, auf die Bühne. Wenn es keine einfache Möglichkeit für Sie, das zu tun, fügen Sie Ihre Tastatur Hörer in einen anderen listener, der weiß, Wann zu Feuer:InformationsquelleAutor fenomas
Fügen Sie Ihre Tastatur-event-Listener auf der Bühne, statt in Ihre Klasse.
Das ist, weil Sie nicht Referenz der Bühne, bis Sie drauf sind. fenomas hat die Lösung.
Ja, wenn Ihre Bühne ist noch nicht gebaut ist, müssen Sie, dass zusätzliche Arbeit.
Es ist nicht, die Bühne muss gebaut werden, das display-Objekt muss ein Teil der Anzeigeliste der Bühne. Es muss nicht sichtbar sein, aber es muss sein, ein Kind oder Enkelkind (etc.) von der Bühne aus.
InformationsquelleAutor Kekoa
platzieren Sie Ihre Tastatur-Ereignis innerhalb des enterframe-Ereignis, so aktualisiert es jedes mal, wenn das frame aktualisiert wird.
InformationsquelleAutor wen