Предыдущий вопрос заставил меня задуматься. Можно ли смоделировать MouseEvent.CLICK для увольнения, просто запустив сначала MOUSE_DOWN, а затем MOUSE_UP.
Согласно документации Adobe. "... Чтобы произошло событие щелчка, оно всегда должно следовать за этой серией событий в порядке возникновения: событие mouseDown, затем mouseUp. Целевой объект должен быть идентичным для обоих этих событий; в противном случае событие щелчка не произойдет. Любое количество других событий мыши может произойти в любое время между событиями mouseDown или mouseUp; событие щелчка все еще происходит. " http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/InteractiveObject.html#event:click
Мои тесты показывают, что событие CLICK НЕ создается из очереди событий ActionScript 3. Или что-то не так с кодом?
См .:
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");
}
}
}
Я должен получить ДВА события 'onClick ()' вместо одного.