Pregunta

I se han topado con un problema de intentar Agenda de reexpedición ratón en ActionScript 3, que estoy cierto que un poco de incredulidad acerca. He reducido a la MouseEvent.clone() método de aparecer, así, completamente roto. El controlador de eventos siguiente:

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

Los resultados en la siguiente salida, ad infinitum:

mousemove 167 206 
mousemoveclone 0 0

Esto coincide con lo que el código estaba redistribución de la carga de la MouseEvent que estaba recibiendo, por lo tanto, mi hipótesis de la función de la copia roto.

Esto es directamente contradictoria con lo que la documentación vinculada indica que debería suceder, a menos que haya perdido algo. Estoy en toda una pérdida en cuanto a lo que he hecho (o dejado de hacer) que podría causar este comportamiento. ¿Los chicos AS3 realmente se olvide de leer sus propios documentos en Event.clone() ?

puedo trabajar alrededor de este lugar por el uso de objetos de función para mi caso de uso específico, pero preferiría no hacerlo. ¿Alguna idea?

Editar El localX y los miembros localY están siendo adecuadamente clonados parece, lo que me pone en incluso más de una pérdida en cuanto a lo que está pasando aquí

.
¿Fue útil?

Solución

Eso es un error conocido. Se puede ver el informe de errores aquí: http://bugs.adobe.com/jira/ explorar / FP-343

Todo lo demás debe conseguir clonado sin embargo. Usted siempre puede asignar stageX y stageY manualmente hasta que se corrija el error.

Otros consejos

Me doy cuenta de este hilo es de 7 meses en estado latente, pero sólo para actualizar esta un poco - esto sigue siendo activo en FP10 y Flex4. También sucede si reexpedición del evento. es decir:.

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

que dispatchEvent () llamada parece ser el equivalente de un clon (), por lo que el stageX y stageY se establece en 0

Esta es una pregunta bastante viejo, pero era lo que le ocurrió cuando busqué en Google para una solución, y lo que es aquí simplemente no es lo suficientemente amplia.

La razón de que esto no ha sido "fijo" se debe a que está funcionando según lo previsto. Los valores stageY stageX y se calculan cuando se invoca el captador, usando el objetivo del evento para hacer la conversión localToGlobal. Esto es necesario para que los números siguen siendo correcta, incluso si el objeto de destino ha cambiado de posición, escala o rotación ya que el evento fue enviado.

Sus dos opciones si realmente necesita una reexpedición MouseEvent con los valores stageX y stageY correctas son:

  1. Crea una subclase personalizada de MouseEvent que anula la stageX y captadores stageY. Usted puede almacenar el objetivo original y hacer el cálculo localToGlobal sí mismo o puede almacenar valores estáticos para stageX y stageY utilizando los valores que están allí cuando se clona el evento original.

  2. Extender Sprite y añadir su despachador para el escenario para que la acción MouseEvent funcionará correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top