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

.
È stato utile?

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:

  1. 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.

  2. Estendere Sprite e aggiungere il dispatcher sul palco in modo che lo stock MouseEvent funzionerà correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top