繁体   English   中英

如何使用ActionScript 3在鼠标单击上创建连续的射击效果?

How can I create a continuous fire effect on mouse click with actionscript 3?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

当有人“单击并按住”时,我想一遍又一遍地触发功能,例如,单击鼠标时每100毫秒执行一次。 我会寻找MouseEvent.MOUSE_DOWN而不是MouseEvent.CLICK,然后在该事件函数上启动计时器,该计时器每100ms调用另一个函数。 然后,在MouseEvent.MOUSE_UP上,我将停止计时器。 我在正确的轨道上吗? 触发mousedown事件时,能否获得更新的X和Y坐标?

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;
}

您走在正确的轨道上。 要在MouseEvent.MOUSE_DOWN也获取更新的鼠标坐标,请添加MouseEvent.MOUSE_MOVE侦听器,并将X和Y坐标保存到此侦听器中的某个变量。 因此,在调用“伪”单击侦听器时,您将始终具有更新的坐标。 然后在MouseEvent.MOUSE_UP删除MouseEvent.MOUSE_MOVE侦听器。
要么
您可以只使用组件的mouseXmouseYcontentMouseXcontentMouseY (对于Flex中的UIComponent )属性。

将button的autorepeat属性设置为true后,侦听buttonDown事件。

<mx:Button label="Click" buttonDown="trace('continuous')" autoRepeat="true"/>
2 沿鼠标单击方向从角色射击

因此,首先我想说明一下,我在AS3方面不是很出色,我完全是自学成才的,因此,我确信我有很多事情做得不好,效率低下或完全是错误的,并且我为任何事情感到高兴如果有什么我可以改善的意见。 因此,我试图为玩家添加功能,使其能够单击我的游戏的一部分,并且从角色沿鼠标单击的方向发射“挂钩”一定长度。 ...

3 使用actionscript 3触摸事件与鼠标单击事件

只是想问一下,在为手机或平板电脑编写应用程序(尤其是iphone)时,使用鼠标点击事件还是触摸点击事件是否有任何优势? 我知道他们两个都应该工作正常,但就性能而言,还有谁更好? 选择其中任何一项时我都应该注意什么? 顺便说一句,我使用actionscript3来实现应用程序。 ...

5 使用鼠标单击创建多个ROI

我的目标是创建一个vector&lt;Rect&gt; ,现在我只从一个Rect开始,该Rect包含用户在帧内创建的,最初从摄像机捕获的任意数量的ROI。 通过按下并抬起鼠标时抓住点来创建ROI。 我知道使用注释掉的cout在onMouse运行用于填充ROI的代码。 如果我尝试在set ...

6 如何使用WM_INPUT检测连续的鼠标单击?

我使用WM_INPUT来检测鼠标更新,当我单击鼠标按钮1时,我将检测到按钮1处于按下状态。 但是,如果我按住按钮,则鼠标的后续更新将显示按钮1未被按下。 MSDN显示usButtonFlags可以检测到鼠标按钮的过渡状态。 这意味着rawinput可以在按下和释放时检测到鼠标,但是无法 ...

7 unity3d:射击鼠标单击场景

查看各种公告板,这是一个常见问题,但是我在网上找不到任何好的答案。 我的项目中有一辆通过箭头键移动的第一人称汽车。 我希望安装在汽车上的枪能够通过瞄准当前屏幕上任何地方的十字准线射击。 现在,除了我单击屏幕时什么都没发生(大约50%)的时间以外,子弹始终一直从中间射出。 这是我通过网 ...

8 射击目标:鼠标单击->离开Bullet Hole.gif

我的网站上有一个版块,其中有几个目标对象供访问者点击射击。 我在该部分使用cursor: crosshair 。 我希望这样做,以便当访客在“目标”部分中单击任何位置时,我想留下一个动画的bullet_hole.gif 我猜代码的命令将在div容器中onmouse单击“位置”上的创建d ...

9 射击鼠标单击方向unity3D

我正在学习unity3D我正在创建一个简单的游戏,玩家需要射击从天上掉下来的敌人。 我已经做了一切,但是当我尝试拍摄播放器在屏幕上单击的位置时,出现此错误NullReferenceException:对象引用未设置为对象的实例。 有趣的是,正在将球射向点击,但由于异常,游戏突然退出。 我的 ...

10 Cocos2d:沿鼠标单击/触摸的方向射击球

与位于布局左上角的球(固定球)一起玩。 当我使用鼠标单击时,我希望用力将球击中并通过鼠标单击。 鼠标单击可以在布局上的任何地方,而不是在球上。 我曾经使用下面的代码中的#1来工作。 但目前它已损坏。 当我以90度单击球时,它会远离鼠标单击而射击,例如90 + x。 角度偏离了10度左 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM