Анимация Javascript wakelJS при нажатой клавише

Я пытаюсь создать RPG-игру HTML5, используя 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;
    }
}

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


person Ron    schedule 08.11.2011    source источник


Ответы (1)


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

Что касается того, как заставить вашего игрока двигаться, пока клавиша нажата, я могу дать несколько советов. Работа событий 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");
}

Это не относится к какому-то одному ключу. Поэтому вы можете изменить его с логического на строку. Возможно, есть строки «вверх», «вниз», «влево», «вправо» и т. д. и ноль, если клавиша не нажата. Надеюсь это поможет.

--Эшли

person user1118684    schedule 28.12.2011