Una pregunta anterior me ha hecho pensar. ¿Es posible simular un MouseEvent.CLICK para que se active disparando primero un MOUSE_DOWN seguido de un MOUSE_UP?¿Es posible SIMULAR un clic del mouse con un mouse hacia abajo y hacia arriba?
Según la documentación de Adobe. "... Para que se produzca un evento de clic, siempre debe seguir esta serie de eventos en el orden de aparición: evento mouseDown, luego mouseUp. El objeto de destino debe ser idéntico para ambos eventos; de lo contrario, el evento click no ocurrir. Cualquier cantidad de otros eventos de mouse puede ocurrir en cualquier momento entre los eventos MouseDown o mouseUp, el evento click aún ocurre ". http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/InteractiveObject.html#event:click
De mis pruebas muestra que el evento CLIC NO se construye a partir de la cola de eventos de ActionScript 3. O hay algo mal con el código?
Ver:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
[SWF(backgroundColor="0xFFFFFF", frameRate="30", width="800", height="600")]
public class Test extends Sprite
{
private var spr:Sprite = new Sprite();
public function Test()
{
trace("Test()");
this.addEventListener(Event.ADDED_TO_STAGE,init);
}
public function init(e:Event):void
{
trace("init()");
spr.graphics.beginFill(0xFF0000);
spr.graphics.drawRect(0,0,200,80);
spr.graphics.endFill();
addChild(spr);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
spr.addEventListener(MouseEvent.CLICK, onClick);
}
private var tick:int = 0;
private function onEnterFrame(e:Event):void
{
if (tick == 1) spr.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN,true,false));
if (tick == 2) spr.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP,true,false));
if (tick == 3) spr.dispatchEvent(new MouseEvent(MouseEvent.CLICK,true,false));
tick++;
}
private function onClick(e:MouseEvent):void
{
trace("onClick() MouseEvent.CLICK dispatched");
}
}
}
que deben recibir dos 'onClick()' eventos en lugar de uno.
Tienes razón. No está creando un nuevo evento CLICK cuando ve un MOUSE_DOWN seguido de un MOUSE_UP (probablemente porque sería muy extraño hacerlo en el código del evento y mucho más natural para generar el evento en el código de procesamiento de entrada del mouse). Tendrá que disparar los tres manualmente. Creo que la documentación se refería a eventos regulares de mouse; Disparándolos manualmente, es poco probable que haya algún código especial que haga cumplir el orden del evento. – Cameron
Creo que la documentación confunde causa y efecto un poco. Se genera un evento de clic desde el mouse hacia abajo + mouse hacia arriba en el mismo objeto. Los tres eventos de ActionScript se envían como resultado. El tiempo de ejecución no usa los eventos de ActionScript para determinar si se debe enviar un evento de clic. –