AS3 KeyboardEvents nicht reagiert, erst nachdem ich geklickt haben, auf eine onscreen-Taste
So, hier ist mein setup:
Meine Dokumentklasse Main.als (it extends MovieClip). Der folgende code ist in meinem Main.als.
Habe ich erklärt, alle diese Variablen in meiner Klasse definition:
private var holder:MovieClip;
private var leftButton:SimpleButton;
private var rightButton:SimpleButton;
im Konstruktor...
holder = new MovieClip();
addChild(holder);
holder.addEventListener(KeyboardEvent.KEY_UP, handleKeyboardEvent);
leftButton = new Arrow();
rightButton = new Arrow();
holder.addChild(leftButton);
holder.addChild(rightButton);
leftButton.x = 50;
leftButton.rotation = 180;
rightButton.x = 150;
leftButton.y = rightButton.y = 50;
leftButton.addEventListener(MouseEvent.CLICK, handlePaging);
rightButton.addEventListener(MouseEvent.CLICK, handlePaging);
...außerhalb der Konstruktor...
public function handleKeyboardEvent ( e:KeyboardEvent ) {
trace("got a keyboard event");
trace("e.charCode : " + e.charCode);
trace("e.keyCode : " + e.keyCode);
switch (e.keyCode) {
case 37: //left arrow
showPreviousMoment();
break;
case 39: //right arrow
showNextMoment();
break;
}
}
Die beiden Tasten sind Instanzen von einem Pfeil movieclip, dass ich in der Bibliothek. Der Pfeil MovieClip hat halt die Grafiken (in den Eigenschaften-dialog für Sie die Basisklasse ist " flash.display.SimpleButton).
Möchte ich die Benutzer werden in der Lage, drücken Sie die Pfeile auf dem Bildschirm ODER die Pfeiltasten auf der Tastatur zu Seite, vorwärts und rückwärts.
So...wenn ich zum testen den Film oder veröffentlichen Sie es als eine app, drücken Sie die linken und rechten Tasten der Tastatur tut nichts. ALLERDINGS...NACHDEM ich klicken Sie auf dem Bildschirm Pfeile, DANN die Tastatur-Ereignisse werden immer abgeholt!!! Wie kommt es, dass meine Tastatur-Ereignisse sind nicht immer erhalten zunächst? Warum funktioniert der Klick auf die onscreen-Tasten machen die 'Halterung' zu Beginn erhalten die Ereignisse?
UPDATE
Habe ich auch nur kommentiert, dass Sie alle von meinem code, AUßER für die Instanziierung der 'Inhaber' und hinzufügen der listener.
Der KeyboardEvents werden nicht gehört zu werden durch den Inhaber.
UPDATE...ANTWORT
So fand ich heraus, dass wenn ich will, um Global zu hören, die KeyboardEvent, sollte ich mich anmelden Bühne als auch die Zuhörer ein. So das war der trick:
stage.addEventListener(KeyboardEvent.KEY_UP, handleKeyboardEvent);
Info von Colin Moock Buch:
Tastatur-Eingabe-Ereignisse auslösen
Anwendung-wide-Befehle sind
in der Regel behandelt weltweit
Zuhörer registriert mit Flash
Spieler die Stage-Instanz. Dagegen
Tastatur-Eingabe-Ereignisse, die trigger eine
spezifische interface-element Antwort
sind in der Regel behandelt durch die Zuhörer
im Objekt registriert, dass
aktuell den Tastatur-Fokus hat.
Also denke ich, dass in meiner ersten version, wenn ich klickte auf den angezeigten Pfeil, habe ich irgendwie das gab den Tastatur-Fokus auf die 'Halter;.
- Sind Sie sicher, es ist der Klick auf die Pfeile, die macht der Tastatur-Ereignisse arbeiten und nicht nur einen Klick, alles im flash-Film? 'Ursache, die es klingt wie Sie benötigen, um das flash-Fenster den Fokus für die keyboard-events zu arbeiten. Versuchen Sie auf etwas anderes in den flash-Film (nicht die Pfeile) und dann testen klicken Sie auf Ihre Tastatur Pfeile, wenn das funktioniert, bedeutet es, es ist nichts falsch mit Ihrem code und alles funktioniert wie es soll.
- Ich vergaß zu erwähnen, dass es ist nicht ein Fokus-Problem. Ich habe geklickt, auf verschiedene Teile der Film-Fenster, und das wäre nicht 'aktivieren' Sie die Tasten. Es ist nur, NACHDEM ich auf dem onscreen-Tasten...dann sind die Tasten aktiv.
- Könntest du die handlePaging Funktion zu der Frage? vielleicht ist es auch etwas gibt, aktiviert die Tastatur-Ereignisse. (nur ein wild guess)
- Ich wusste, es hatte etwas zu tun mit konzentrieren. Vielleicht nicht den Fokus auf das flash-Fenster, aber der Halter mc. =D Und da die Pfeile innerhalb des Halters, Sie technisch auf den Link klicken den Halter, wenn Sie auf die Pfeile, wobei sich der Fokus auf die richtigen mc.
- Post die sich selbst beantworten und markieren Sie angenommen wird, Sie es herausgefunden legitim, und wenn das problem gelöst ist, dann ist die Frage, muss zeigen, dass es beantwortet wurde. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Regel das Objekt, das Sie klicken auf den Fokus erhält. Das ist wirklich wirkt sich auf die Zuhörer, das ist, warum es funktioniert, wenn Sie fügen Sie es auf die Bühne.
Wenn Sie geklickt haben, auf jeder von denen, die Ihre "Halter" Objekt bekam den Fokus, also des Ereignisses, das ausgelöst. Jetzt tun Sie es gut, dass Sie fügte hinzu, es auf die Bühne.
Einer dynamischeren Lösung (sprich wenn du dynamisch Instanz einer Klasse, die enthält ein movieclip) ist zu verwenden:
Also wenn Sie die Ereignis-listener, um die Instanz der Klasse, die tatsächlich die Bedürfnisse zu hören, um wichtige Ereignisse, dies könnte besser für Sie arbeiten.
Mir die bisherigen Vorschläge nicht funktioniert hat, wie ich das hinzufügen meiner main Klasse-Instanz zur Laufzeit. Am Ende habe ich mein code sah so aus:
...Sie müssen eine singletron für diese 2 Linien zu arbeiten.
Ich im posting die Antwort auf meine Frage basiert auf dem @Ascension-Systeme eine Empfehlung. Ich bin nur wirklich kopieren von mein update zu meiner oben genannten Frage.
UPDATE...ANTWORT
So fand ich heraus, dass wenn ich will, um Global zu hören, die KeyboardEvent, sollte ich mich anmelden Bühne als auch die Zuhörer ein. So das war der trick:
Info von Colin Moock Buch:
Also denke ich, dass in meiner ersten version, wenn ich klickte auf den angezeigten Pfeil, habe ich irgendwie das gab den Tastatur-Fokus auf die 'Halter'.