我一直在做一些有关MouseEvents的测试。感谢Neal Davis,其中大部分都是为我澄清的。现在,我想设计代码,这样每当我左键单击时,它将开始沿着鼠标的x和y坐标绘制圆圈。当我松开鼠标左键时,它将停止绘制圆圈。我试图尽可能地复制这个,但这是我最终陷入困境的地方:
stage.addEventListener(MouseEvent.MOUSE_DOWN, mClickOn);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mMove);
stage.addEventListener(MouseEvent.CLICK, mClickOff);
public var clickOn:Boolean;
public var clickOff:Boolean;
public function mClickOn(e:MouseEvent):void
{
clickOn = e.buttonDown;
}
public function mClickOff(e:MouseEvent):void
{
clickOff = e.buttonDown
}
public function mMove(e:MouseEvent):void
{
if (clickOn) //keep drawing when left click
{
draw.create(e.localX, e.localY);
addChild(draw);
}
else if (clickOff) //don't draw when you let go of left click
{
null;
}
}
问题是左键单击时MOUSE_DOWN为真,但我认为当我们不再点击时,它会自动返回false。在我的测试中,它在第一次点击后保持不变。至于CLICK,它总是错误的。
如何使这些MouseEvent可以打开和关闭?我想制作一个铅笔工具/模拟器。
答案 0 :(得分:1)
以下是这个想法:
做这样的事情:
private function mDown(me:MouseEvent):void{
_mDown = true;
stage.removeEventListener(MouseEvent.MOUSE_DOWN, mDown);
stage.addEventListener(MouseEvent.MOUSE_UP, mUp);
}
private function mUp(me:MouseEvent):void{
_mDown = false;
stage.removeEventListener(MouseEvent.MOUSE_UP, mUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN,mDown);
}
然后你需要一个appTick或gameLoop或者timerEvent,比如
stage.addEventListener(Event.ENTER_FRAME, applicationLoop);
private function applicationLoop(e:Event):void{
if (_mDown == true){
drawCircles();
}
然后
private function drawCircles():void{
// your draw logic
}
应该这样做。
注意强>
如果你想以喷漆工具的方式绘制圆圈(即使鼠标不移动也会不断增加油漆),每帧检查_mDown
标志。如果您希望它只在鼠标移动时添加圆圈,请检查MOUSE_MOVE事件上的标志。
答案 1 :(得分:0)
点击是按下鼠标按钮再次放开。这对您的情况没有用,因为您要单独查看鼠标的向下和向上,以启动或停止绘制过程。使用MouseEvent.MOUSE_DOWN
和MouseEvent.MOUSE_UP
更合适。
要开始和停止该过程,只需添加或删除侦听器即可在两种绘图状态之间切换而不是绘图。
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
public function onMouseDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
public function onMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
public function onMouseMove(e:MouseEvent):void
{
draw.create(e.localX, e.localY);
addChild(draw);
}