Question

J'ai rencontré un problème en essayant de réexpédier événements de souris dans ActionScript 3, que je suis certes un peu incrédule au sujet. Je l'ai réduit à la MouseEvent.clone() méthode comparants, bien, complètement cassé. Le gestionnaire d'événements suivant:

    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);
    } 

Résultats de la sortie suivante, ad infinitum:

mousemove 167 206 
mousemoveclone 0 0

correspond à ce que le code que je MouseEvent à redispatching recevait, d'où mon hypothèse de la fonction clone cassé.

Ceci est en contradiction directe avec ce que la documentation liée indique devrait se produire, à moins d'avoir manqué quelque chose. Je suis à une perte totale de ce que je l'ai fait (ou n'a pas fait) qui pourrait provoquer ce problème. Est-ce que les gars AS3 vraiment oublier de lire leurs propres documents sur

Était-ce utile?

La solution

thats un bug connu. Vous pouvez voir le rapport de bogue ici: http://bugs.adobe.com/jira/ parcourir / FP-343

Tout le reste doit se clonée bien. Vous pouvez toujours assigner stageX et stageY manuellement jusqu'à ce que le bug est corrigé.

Autres conseils

Je sais que ce fil est de 7 mois en sommeil, mais juste pour mettre à jour ce un peu - c'est toujours actif dans FP10 et Flex4. Il arrive aussi si vous redistribuez l'événement. i.e.:.

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

cet appel dispatchEvent () semble être l'équivalent d'un clone (), de sorte que le stageX et stageY sont mis à 0

Ceci est une question assez vieux, mais il était venu ce quand je googlé pour trouver une solution, et ce qui est ici est tout simplement pas assez complet.

La raison pour laquelle cela n'a pas été « fixe » est parce qu'il fonctionne comme prévu. Les valeurs stageX et stageY sont calculées lorsque vous invoquez le getter, en utilisant la cible de l'événement pour effectuer la conversion localToGlobal. Cela est nécessaire pour que les chiffres restent corrects, même si l'objet cible a changé de position, l'échelle ou la rotation depuis l'événement a été distribué.

Vos deux options si vous avez vraiment besoin d'une nouvelle répartition mouseEvent avec des valeurs correctes stageX et stageY sont:

  1. Créer une sous-classe personnalisée de MouseEvent qui l'emporte sur la stageX et getters stageY. Vous pouvez stocker la cible d'origine et faire le calcul localToGlobal vous-même ou vous pouvez stocker des valeurs statiques pour stageX et stageY en utilisant les valeurs qui sont là quand vous cloner l'événement d'origine.

  2. Étendre Sprite et ajoutez votre répartiteur à l'étape de sorte que le stock MouseEvent fonctionnera correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top