这就是我想要实现的目标;

单击MovieClip(Cannon_MC),正在开枪(BALL_MC)

鼠标按下的时间越长,发射球的速度就会增加。我问你的问题是;

实现这一目标最有效的方法是什么?用计时器或类似的东西;

    var isMouseDown:Boolean = false;
    var speed= 10;    

    myCannon.addEventListener(MouseEvent.MOUSE_DOWN,buttonPressed);

        function buttonPressed(event:MouseEvent){
            //trace("down");
            isMouseDown == true;

            if(isMouseDown == false)
            {
                speed == +1
            }

        }
有帮助吗?

解决方案

MOUSE_DOWN 事件仅触发一次。要获得您想要的效果,您需要 MOUSE_DOWN 和 MOUSE_UP 事件处理程序的组合。

您可以在 MOUSE_DOWN 事件中将变量以及当前时间戳设置为 true flash.utils.getTimer()

然后,在 MOUSE_UP 上,如果您在 MOUSE_DOWN 中设置的变量为 true,则计算经过的时间并相应地设置功率。

例子:

var isMouseDown:Boolean = false;
var mouseDownBegin:int;
var speed = 10; 
var speed_inc = 2; // give it in per second
var speed_max = 100; // max speed possible

// add event handlers
myCannon.addEventListener(MouseEvent.MOUSE_DOWN, buttonPressed);
myCannon.addEventListener(MouseEvent.MOUSE_UP, buttonReleased);

function buttonPressed(event:MouseEvent){
    isMouseDown = true;
    mouseDownBegin = flash.utils.getTimer();
}

function buttonReleased(event:MouseEvent){
    if(isMouseDown == true){
        // get time between press and release
        var timeElapsed = flash.utils.getTimer() - mouseDownBegin;

        // reset isMouseDown
        isMouseDown = false;

        // compute speed
        speed += int(Math.floor(speed_inc * (timeElapsed / 1000.0)));
        speed = Math.min(speed, speed_max);

        // code to fire ball with new speed
        // .......
    }
}

您还可以添加 ENTER_FRAME 事件并为功率计或其他视觉效果设置动画

更新
正如 The_asMan 所指出的, MOUSE_UP 如果在舞台外拖动并释放鼠标,事件将不会触发。要处理这种情况,请添加事件侦听器 MOUSE_LEAVE 事件的回调作为buttonReleased函数的副本,但它接受一个Event对象:

function buttonReleasedOutsideStage(event:Event){
    if(isMouseDown == true){
        // get time between press and release
        var timeElapsed = flash.utils.getTimer() - mouseDownBegin;

        // reset isMouseDown
        isMouseDown = false;

        // compute speed
        speed += int(Math.floor(speed_inc * (timeElapsed / 1000.0)));
        speed = Math.min(speed, speed_max);

        // code to fire ball with new speed
        // .......
    }
}
stage.addEventListener(Event.MOUSE_LEAVE, buttonReleasedOutsideStage);

其他提示

(非常短的伪代码)
编写一些事件处理程序:

  • 鼠标按下时:设置标志 _mouseDown, , 放 power 归零
  • 框架上: if (_mouseDown) power++;
  • 鼠标按下时:清除标志 _mouseDown 并发射累积的球 power

帧率独立版本:

  • 鼠标按下时: _loadStart = getTimer(); _mouseDown = true; _power = 0;
  • 框架上: if (_mouseDown) delta = getTimer() - _loadStart; _power += delta;
  • 鼠标按下时:射门 _power, _mouseDown = false;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top