Frage

Ich habe auf ein Problem stoßen versuchen, redispatch Mausereignisse in Actionscript 3, die ich zugegebenermaßen skeptisch über ein bisschen bin. Ich habe es verengt auf die MouseEvent.clone() Methode Erschienene, na ja, völlig gebrochen. Die folgenden Ereignishandler:

    private function handleMouseMove( evt : MouseEvent ) : void
    {
        trace("mousemove", evt.stageX, evt.stageY);
        var newEvt : MouseEvent = evt.clone() as MouseEvent;
        trace("mousemoveclone", newEvt.stageX, newEvt.stageY);
    } 

Ergebnisse in der folgenden Ausgabe, ad infinitum:

mousemove 167 206 
mousemoveclone 0 0

Das passt, was der Code ich den Mouseevent wurde Redispatching zu empfangen wurde, daher meine Hypothese des gebrochenen Klonfunktion.

Dies ist direkt widersprüchlich zu dem, was die verknüpfte Dokumentation zeigt passieren sollte, es sei denn ich etwas verpasst haben. Ich bin in einer ganzen ratlos, was ich getan habe (oder nicht getan haben), die möglicherweise dieses Verhalten verursachen könnten. Haben die AS3 Jungs vergessen wirklich ihre eigenen Dokumente auf

War es hilfreich?

Lösung

Das ist ein bekannter Fehler. Sie können den Fehlerbericht siehe hier: http://bugs.adobe.com/jira/ durchsuchen / FP-343

Alles andere sollte allerdings geklont bekommen. Sie können immer nur zuweisen stageX und stageY manuell, bis der Fehler behoben ist.

Andere Tipps

Ich weiß, das Gewinde 7 Monate ruhend, aber nur ein bisschen diese zu aktualisieren - dies ist in FP10 und Flex4 noch aktiv. Es kommt auch vor, wenn Sie das Ereignis zusenden. das heißt:.

private function mouseListener( e:MouseEvent ):void
{
    dispatchEvent( e );
}

, dass dispatch () -Aufruf scheint die äquivalent einen Klon zu sein (), so dass die stageX und stageY auf 0 gesetzt

Dies ist eine ziemlich alte Frage, aber es war das, was oben kam, als ich für eine Lösung gegoogelt, und was hier ist einfach nicht umfassend genug.

Der Grund ist dies noch nicht „fixiert“ ist, weil es wie vorgesehen funktioniert. Die stageX und stageY Werte berechnet werden, wenn Sie die Getter aufrufen, die Veranstaltungs-Ziel mit der localToGlobal Umwandlung zu tun. Dies ist notwendig, so dass die Zahlen korrekt bleiben, auch wenn das Zielobjekt Position, Skalierung oder Rotation verändert, seit dem Ereignis ausgelöst wurde.

Ihre zwei Möglichkeiten, wenn Sie wirklich ein Mouseevent mit korrekten stageX und stageY Werte der Rückbeförderung benötigen, sind:

  1. eine benutzerdefinierte Unterklasse von Mouse erstellen, die die stageX und stageY Getter außer Kraft setzt. Sie können entweder das ursprüngliche Ziel speichern und die localToGlobal Berechnung selbst tun, oder Sie können statische Werte für stageX und stageY speichern die Werte verwenden, die es gibt, wenn Sie das ursprüngliche Ereignis klonen.

  2. Sprite erweitern und Ihre Disponenten auf die Bühne hinzufügen, so dass der Aktie Mouseevent wird ordnungsgemäß funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top