前の質問は私に考えさせてくれました。 MouseEvent.CLICKをシミュレートして、最初にMOUSE_DOWNの後にMOUSE_UPを発射することで起動することは可能ですか?マウスの上下のイベントを使ってマウスのクリックをシミュレートできますか?
アドビのdoumentationに従って。 "...クリックイベントが発生するには、発生した順にこの一連のイベントに常に従わなければなりません:mouseDownイベント、mouseUpこれらのイベントの両方で対象オブジェクトが同一でなければなりません。 mouseDownイベントまたはmouseUpイベントの間にいつでも他のいくつかのマウスイベントが発生することがありますが、clickイベントはまだ発生します。 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");
}
}
}
私は2つの 'のonClick()' イベントの代わりの1を取得する必要があります。
あなたはそうです。 MOUSE_DUPに続いてMOUSE_UPが表示されたときに新しいCLICKイベントを作成していません(おそらく、イベントループコードでこれを実行するのが非常に奇妙で、マウス入力処理コードでイベントを生成するのが自然であるからです)。あなたは手動で3つのすべてを起動する必要があります。私はドキュメントが通常のマウスイベントを指していたと思います。手動で起動すると、イベントオーダーを実施する特別なコードはありません。 – Cameron
私は文書化が混乱している原因と効果が少しあると思います。クリックイベントは、同じオブジェクト上でマウスの下から上にマウスで生成されます。結果として、3つのActionScriptイベントがすべて送出されます。ランタイムは、ActionScriptイベント自体を使用してクリックイベントを送出するかどうかを判断しません。 –