ActionScript MouseEvent.clone () appare rotto?
-
05-09-2019 - |
Domanda
Ho incontrato un problema di tentare di eventi rispedizione mouse in ActionScript 3, che io sono certamente un po 'incredula circa. Ho ristretto la scelta a MouseEvent.clone()
metodo di apparire, così, completamente rotto. Il seguente gestore di eventi:
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);
}
Risultati nel seguente output, ad infinitum:
mousemove 167 206
mousemoveclone 0 0
Questo corrisponde a ciò che il codice che stavo rispedizione il MouseEvent al riceveva, da qui la mia ipotesi della funzione di clone di rotta.
Questa è direttamente in contraddizione con ciò che la documentazione collegata indica che dovrebbe accadere, a meno che non ho perso qualcosa. Sono ad un intero perdita quanto a quello che ho fatto (o non fatto) che potrebbe causare questo comportamento. Ha fatto i ragazzi AS3 davvero dimenticate di leggere i propri documenti su Event.clone()
?
posso lavorare intorno a questo invece di usare oggetti funzione per il mio specifico caso d'uso, ma io preferisco non farlo. Tutte le idee?
Modifica Il localX ei membri localY vengono adeguatamente clonati a quanto pare, il che mi mette a ancora di più di una perdita quanto a che cosa sta succedendo qui
.Soluzione
Quello è un bug noto. Potete vedere il bug report qui: http://bugs.adobe.com/jira/ sfogliare / FP-343
Tutto il resto dovrebbe avere clonato però. Si può sempre e solo assegnare stageX e stageY manualmente finché non viene risolto il bug.
Altri suggerimenti
Mi rendo conto che questa discussione è di 7 mesi in sospeso, ma solo per aggiornare questo un po '- questo è ancora attiva nel FP10 e Flex4. Succede anche se viene reinviato l'evento. cioè:.
private function mouseListener( e:MouseEvent ):void
{
dispatchEvent( e );
}
che dispatchEvent () chiamata sembra essere l'equivalente di un clone (), in modo che lo stageX e stageY sono impostati a 0
Questa è una domanda piuttosto vecchio, ma era quello che è venuto quando ho Googled per una soluzione, e ciò che è qui solo non è abbastanza completo.
La ragione per cui questo non è stato "fisso" è dovuto al fatto che funzioni come previsto. Lo stageX ei valori stageY vengono calcolati quando si richiama il getter, con l'obiettivo della manifestazione per fare la conversione localToGlobal. Ciò è necessario in modo che i numeri rimangono corretta anche se l'oggetto di destinazione è cambiato posizione, la scala o la rotazione poiché l'evento è stato inviato.
I tuoi due opzioni, se si ha realmente bisogno la rispedizione un MouseEvent con valori stageX e stageY corrette sono:
-
Creare una sottoclasse personalizzata di MouseEvent che sostituisce lo stageX e getter stageY. È possibile memorizzare l'obiettivo originale e fare il calcolo localToGlobal soli o si può memorizzare i valori statici per stageX e stageY utilizzando i valori che ci sono quando si clona l'evento originale.
-
Estendere Sprite e aggiungere il dispatcher sul palco in modo che lo stock MouseEvent funzionerà correttamente.