AS3 Удерживайте mouseDown, чтобы увеличить скорость / мощность - PullRequest
0 голосов
/ 12 сентября 2011

это то, что я пытаюсь выполнить;

Нажатием на видеоклип (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
            }

        }

Ответы [ 2 ]

7 голосов
/ 12 сентября 2011

Событие MOUSE_DOWN вызывается только один раз. Чтобы получить желаемый эффект, вам нужна комбинация обработчиков событий MOUSE_DOWN и MOUSE_UP.

Вы можете установить для переменной значение true в событии MOUSE_DOWN вместе с текущей отметкой времени от 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);
2 голосов
/ 12 сентября 2011

(в очень коротком псевдокоде)
Напишите некоторые обработчики событий:

  • onMouseDown: устанавливает флаг _mouseDown, устанавливает power в ноль
  • onFrame: if (_mouseDown) power++;
  • onMouseUp: снимает флажок _mouseDown и запускает шар с накопленным power

Независимая от частоты кадров версия:

  • onMouseDown: _loadStart = getTimer(); _mouseDown = true; _power = 0;
  • onFrame: if (_mouseDown) delta = getTimer() - _loadStart; _power += delta;
  • onMouseUp: выстрелил мяч с _power, _mouseDown = false;
...