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. 🙂
InformationsquelleAutor milesmeow | 2011-04-22
Schreibe einen Kommentar