1個のmcにCLICKイベントとMOUSE_DOWNとMOUSE_UPイベントリスナーを設定した場合、1回のクリックでそれぞれ1回ずつイベントが発生しますが、MOUSE_DOWNとMOUSE_UPイベントをドラッグ&ドロップ等で使いつつクリックも検出したい場合は思惑通りに動いてくれなかったので、動かすための手順をメモ。
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Index extends Sprite
{
var sp:Sprite;
var pointMousedown:Point;
public function Index()
{
sp = new Sprite();
sp.graphics.beginFill(0x0);
sp.graphics.drawRect(0, 0, 100, 40);
sp.x = stage.stageWidth / 2 - sp.width / 2;
sp.y = stage.stageHeight / 2 - sp.height / 2;
addChild(sp);
// sp.addEventListener(MouseEvent.CLICK, onClick, false, 0, true);
sp.addEventListener(MouseEvent.MOUSE_DOWN, onMousedown, false, 0, true);
sp.addEventListener(MouseEvent.MOUSE_UP, onMouseup, false, 0, true);
}
private function onClick(e:MouseEvent):void {
trace("onClick");
}
private function onMousedown(e:MouseEvent):void {
trace("onMousedown");
e.target.startDrag();
pointMousedown = new Point(e.target.x, e.target.y);
}
private function onMouseup(e:MouseEvent):void {
trace("onMouseup");
e.target.stopDrag();
var pointMouseup:Point = new Point(e.target.x, e.target.y);
//5ピクセル以内ならクリックとみなし処理を行う
if (Point.distance(pointMousedown, pointMouseup) trace("onClickByScript");
}
trace("distance:" + Point.distance(pointMousedown, pointMouseup));
}
}
}
CLICKイベントは使わずにMOUSE_DOWNとMOUSE_UPの間に移動したピクセル数を算出し、ある値を超えればクリックとみなす。とういもの。
この応用で、MOUSE_DOWNとMOUSE_UPの間にかかった時間も判断の1つとして加えても良いかも。

Comments
Powered by Facebook Comments