2010-02-09 5 views
0

Ceci est la chose la plus étrange et la plus frustrante que j'ai vécue avec flash et je n'ai aucune idée comment résoudre le problème.Comportement d'événement bizarre en flash AS3

Tenir compte de cette fonction

public function trackDownloadHandler(event:MP3DownloadEvent):void 
    { 
    dispatchEvent(event); 
    //dispatchEvent(new MP3DownloadEvent(MP3DownloadEvent.OPEN,event.channelPadID)) 
    } 

Je l'ai fait un million de fois. Un événement particulier arrive dans un gestionnaire qui l'a envoyé de nouveau à partir de la classe à laquelle il est arrivé.

Mais pour une raison bizarre, je reçois une erreur disant

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::[email protected] to com.rocudo.audioEngine.events.MP3DownloadEvent. 

je ne vois pas où je suis en train de convertir quoi que ce soit partout?

J'ai donc essayé d'envoyer un tout nouvel événement à la place et de voir comment cela a fonctionné. La mise en œuvre est ici ci-dessous.

public function trackDownloadHandler(event:MP3DownloadEvent):void 
    { 
    //dispatchEvent(event); 
    dispatchEvent(new MP3DownloadEvent(MP3DownloadEvent.OPEN,event.channelPadID)) 
    } 

Mais dans ce cas, le message d'erreur de type d'origine disparaît et je reçois une nouvelle erreur en disant

Type was not found or compile time constant :Vector 

Qu'est-ce qui se passe ??

Répondre

2

I pensez le problème peut être de ne pas avoir une méthode de clonage définie dans votre MP3DownloadEvent personnalisé.

Adobe Livedocs flash.events.Event clone()

Renvoie un nouvel objet de l'événement qui est une copie de l'instance d'origine de l'événement objet. Vous n'appelez normalement pas clone(); la classe EventDispatcher l'appelle automatiquement lorsque vous redispatch un événement-c'est-à-dire lorsque vous appelez dispatchEvent (événement) à partir d'un gestionnaire qui gère l'événement.

Pour votre erreur Vector, je crois que les vecteurs ne sont disponibles que dans CS4. Donc, si vous utilisez du code écrit pour CS4 (et utilisez Vecotrs), et que vous compilez avec CS3, vous obtiendrez probablement une erreur comme celle-ci.

+0

Je suis d'accord avec sberry2A - remplacer la méthode clone sur votre classe d'événement personnalisé, et envoyer e.clone(). Bien que, la deuxième approche que vous avez mentionnée fonctionne, en créant un nouveau, et que l'erreur de vecteur est susceptible d'être due à ce que mentionne sberry2A.Sachez simplement qu'à un certain moment, vous devrez supprimer l'écouteur d'événement, sinon vous rencontrerez un débordement de récursivité d'envoi d'événement. – falomir

0

Peut-être que c'est dans l'expédition de l'événement qui appelle trackDownloadHandler(event:MP3DownloadEvent)? Si vous envoyez juste un Event de vanille, alors l'erreur que vous obtenez aurait du sens.

+0

Merci pour les réponses. Je suis en train de coder dans le générateur de flex avec le compilateur 10.0.0, donc je n'ai pas vraiment l'erreur du vecteur? Je n'ai pas ajouté le code pour mon événement personnalisé, mais il remplace en fait la méthode clone. Aussi je suis deffinately non seulement expédier un événement ordinaire. Je n'ai tout simplement pas de sens, mais je suppose que je dois de plus regardé quelque chose Je vais creuser autour de ce un peu plus le matin ..... Je suis très confus si 0-o. – dubbeat