当有人“点击并按住”时,我想要一次又一次地关闭功能,例如,在点击鼠标时每100ms一次。而不是MouseEvent.CLICK我会寻找MouseEvent.MOUSE_DOWN,然后在该事件函数上启动一个计时器,每隔100ms调用另一个函数。然后,在MouseEvent.MOUSE_UP上,我会停止计时器。我是在正确的轨道上吗?在mousedown事件发生时,我能够获得更新的X和Y坐标吗?
答案 0 :(得分:3)
尝试类似的东西:就个人而言,我没有计时器,只需让帧率处理事件发生的频率。
var _mouseDown:Boolean = false;
var _msTimer:int = 3;
var _msMax:int = _msTimer;
stage.addEventListener(MouseEvent.MOUSE_DOWN, _mousedown);
stage.addEventListener(MouseEvent.MOUSE_UP, _mouseup);
stage.addEventListener(Event.ENTER_FRAME, _handle);
function _mousedown(e:MouseEvent):void
{
_mouseDown = true;
}
function _mouseup(e:MouseEvent):void
{
_mouseDown = false;
}
function _handle(e:Event):void
{
if(_mouseDown) _msTimer --;
else _msTimer = _msMax;
if(_msTimer < 1)
{
_msTimer = _msMax;
// DO FIRE EFFECT HERE
var xm:Number = stage.mouseX;
var ym:Number = stage.mouseY;
trace("do fire effect here", xm, ym);
}
}
这是一个快速射击效果,仅适用于踢球:)
var _mouseDown:Boolean = false;
var fire:Array = [];
var colors:Array = [0xFF0000,0xFF9900,0xFFCC00,0xFF0000,0xFF9900,0xFFCC00,0x333333];
var rect:Rectangle = new Rectangle(0,0,stage.stageWidth, stage.stageHeight);
var point:Point = new Point(0, 0);
var bmd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
var filter:BlurFilter = new BlurFilter(6,6,3);
var container:MovieClip = new MovieClip();
var bitmap:Bitmap = new Bitmap(bmd);
addChild(bitmap);
stage.addEventListener(MouseEvent.MOUSE_DOWN, _mousedown);
stage.addEventListener(MouseEvent.MOUSE_UP, _mouseup);
stage.addEventListener(Event.ENTER_FRAME, _handle);
function _mousedown(e:MouseEvent):void
{
_mouseDown = true;
}
function _mouseup(e:MouseEvent):void
{
_mouseDown = false;
}
function _handle(e:Event):void
{
if(_mouseDown)
{
// DO FIRE EFFECT HERE
var xm:Number = stage.mouseX;
var ym:Number = stage.mouseY;
var k:uint = 0;
for(k; k<10; k++)
{
var s:Sprite = fireThing();
s.x = -30 + xm + Math.random()*30;
s.y = -30 + ym + Math.random()*30;
}
}
// handle fire
var i:Array;
for each(i in fire)
{
i[0].x += Math.cos(i[1].ang) * i[1].speed;
i[0].y += Math.sin(i[1].ang) * i[1].speed;
if(i[0].y < 0 || i[0].x < 0 || i[0].x > stage.stageWidth || i[0].y > stage.stageHeight)
{
if(i[0].parent) i[0].parent.removeChild(i[0]);
var ix:uint = fire.indexOf(i);
fire.splice(ix, 1);
}
}
bmd.lock();
bmd.draw(container);
bmd.applyFilter(bmd, rect, point, filter);
bmd.unlock();
}
function fireThing():Sprite
{
var s:Sprite = new Sprite();
s.graphics.beginFill(colors[uint(Math.random()*colors.length)]);
s.graphics.drawCircle(0,0,1+Math.random()*2);
s.graphics.endFill();
var o:Object =
{
ang: Math.random()*Math.PI*2,
speed: Math.random()*4
};
fire.push([s,o]);
container.addChild(s);
return s;
}
答案 1 :(得分:0)
你走在正确的轨道上。要在MouseEvent.MOUSE_DOWN
添加MouseEvent.MOUSE_MOVE
侦听器上获取更新的鼠标坐标,并将X和Y坐标保存到此侦听器中的某个变量。因此,在调用“伪”点击监听器时,您将始终拥有更新的坐标。在MouseEvent.MOUSE_UP
移除MouseEvent.MOUSE_MOVE
听众。
OR
您可以使用mouseX
,mouseY
和contentMouseX
,contentMouseY
(适用于Flex中的UIComponent)属性。
答案 2 :(得分:0)
将按钮的自动重复属性设置为true后,侦听按钮向下事件。
<mx:Button label="Click" buttonDown="trace('continuous')" autoRepeat="true"/>