Javascript easelJS анимация при нажатой клавише - PullRequest
2 голосов
/ 08 ноября 2011

Я пытаюсь сделать HTML5 RPG-игру с использованием easelJS для обработки спрайтов.Когда я нажимаю клавиши со стрелками в любом направлении, персонаж не воспроизводит анимацию, вместо этого он, похоже, возвращается к кадру 0 и останавливается вместо того, чтобы зацикливать анимацию.

Мне нужна анимация, чтобы продолжить зацикливаниев то время как клавиша нажата, вместо этого персонаж застревает в кадре.

Вот игра, которая у меня пока есть, это действительно беспорядок, потому что я экспериментирую и все еще изучаю HTML5.http://cloudrealms.com/dev/

Вот код, который я использую:

Захват клавиши со стрелкой:

      $(window).keydown(
        function(e){
            keys[e.which] = true;
            if(isMovementKey(e.which))
            {
                moveOrder.unshift(e.which);
                jQuery.unique(moveOrder);
                animationsToPlay.push(1);
            }
            e.preventDefault();
            return false;
        }
    );
    $(window).keyup(
        function(e){
            keys[e.which] = false;
            if(isMovementKey(e.which))
            {
                moveOrder.splice(jQuery.inArray(e.which, moveOrder),1);
            }
        }
    );

В моем тике у меня есть функция HandleInput () здеськод:

function HandleInput()
{
    switch (moveOrder[0]) {
        case 38:  /* Up arrow was pressed */
            playerSequence[playerID].gotoAndPlay("walk_up");
            playerSequence[playerID].y -= playerSequence[playerID].vY;
        break;
        case 40:  /* Down arrow was pressed */
            playerSequence[playerID].gotoAndPlay("walk_down");
            playerSequence[playerID].y += playerSequence[playerID].vY;
        break;
        case 37:  /* Left arrow was pressed */
            playerSequence[playerID].gotoAndPlay("walk_left");
            playerSequence[playerID].x -= playerSequence[playerID].vX;
        break;
        case 39:  /* Right arrow was pressed */
            playerSequence[playerID].gotoAndPlay("walk_right");
            playerSequence[playerID].x += playerSequence[playerID].vX;
        break;
    }
}

Я хочу знать, как я могу оживить спрайт игрока, пока нажата клавиша со стрелкой?

1 Ответ

3 голосов
/ 28 декабря 2011

Это немного сбивает с толку, и трудно сказать, что делает ваш код, не могли бы вы предоставить ссылку?

С точки зрения того, что ваш игрок должен двигаться, когда клавиша нажата, я могу дать несколько советов. То, как работают события onkeydown, заключается в том, что, пока клавиша не нажата, событие будет запущено.

На вашем месте я бы имел логическое значение, которое представляет, была ли нажата эта клавиша или нет. В случае события keydown вы устанавливаете его значение true, в случае события keyup вы устанавливаете значение false .:

$(window).keydown(
    function(e){
        bool_keyDown = true;
    }
);
$(window).keyup(
    function(e){
        bool_keyDown = false;
    }
);

Обратите внимание, что это работает для любой клавиши, вам нужно указать, какую вы хотите в функции keydown, но вы можете оставить ее общей в функции keyup. В своем тикере вы проверяете, правда ли это. В случае, если это правда, вы запускаете функциональность gotoandplay в своей таблице спрайтов:

function HandleInput()
{
    if(bool_keyDown) 
        playerSequence[playerID].gotoAndPlay("walk_up");
}

Это не относится ни к одному из ключей. Таким образом, вы можете изменить его с bool на строку. Может быть, есть строки «вверх», «вниз», «влево», «вправо» и т. Д., И ноль, если ни одна клавиша не нажата. Надеюсь это поможет.

- Ashley

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...