Ходячая анимация при движении в as3 - PullRequest
0 голосов
/ 17 февраля 2012

Хорошо, у меня есть фрагмент ролика, созданный как "человек". Я сделал его так, чтобы у него была такая же рамка для бездействия и ходьбы. Он также может двигаться влево / вправо. (Я тоже заставил его атаковать, но это не имеет значения);

[холостой ход] [прогулка [] Последний кадр имеет

gotoAndPlay("walk");

Мне нужно, чтобы он проходил по рамкам «ходьбы», пока я не подниму левую / правую клавишу, а затем вернусь в положение «холостой ход». Что происходит, так это то, что он пройдет цикл один раз, а затем перейдет в режим ожидания, даже если я не поднял ключ. Это мой код

      var leftKeyDown:Boolean = false;
        var upKeyDown:Boolean = false;
        var rightKeyDown:Boolean = false;
        var downKeyDown:Boolean = false;
        var charSpeed:Number = 7;
        man.addEventListener(Event.ENTER_FRAME, moveChar);
    function moveChar(event:Event):void{
    if(leftKeyDown || rightKeyDown)
{
    man.gotoAndPlay("walk");
}


if(rightKeyDown)
{
    man.x += charSpeed;
    man.scaleX=1;
}
if(leftKeyDown)
{
    man.x -= charSpeed;
    man.scaleX=-1;
}

            }


        stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
        function checkKeysDown(event:KeyboardEvent):void{

            if(event.keyCode == 37 || event.keyCode == 65){
                leftKeyDown = true;


            }

            if(event.keyCode == 38 || event.keyCode == 87){
                upKeyDown = true;
            }
            if(event.keyCode == 39 || event.keyCode == 68){
                rightKeyDown = true;
                    }
            if(event.keyCode == 40 || event.keyCode == 83){
                downKeyDown = true;
            }

        }



        // checking for upkeys
     stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
function checkKeysUp(event:KeyboardEvent):void{
    if(event.keyCode == 37 || event.keyCode == 65){
        leftKeyDown = false;
        man.gotoAndStop("idle");
    }
    if(event.keyCode == 38 || event.keyCode == 87){
        upKeyDown = false;

    }
    if(event.keyCode == 39 || event.keyCode == 68){
        rightKeyDown = false;
        man.gotoAndStop("idle");
    }
    if(event.keyCode == 40 || event.keyCode == 83){
        downKeyDown = false;

    }
}

спасибо

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Просто выйдите из функции после того, как оператор if пройдет, и если все остальное не сработает, он простаивает.

if(leftKeyDown){
    man.x -= charSpeed;
    man.scaleX=-1;
    man.gotoAndPlay("walk");
    return;
}
if(rightKeyDown){
    man.x += charSpeed;
    man.scaleX=1;
    man.gotoAndPlay("walk");
    return;
}

 man.gotoAndStop("idle");

или если вы хотите другой аспект

switch(true){
  case leftKeyDow:
        man.x -= charSpeed;
        man.scaleX=-1;
        man.gotoAndPlay("walk");
        break;
  case rightKeyDown:
        man.x += charSpeed;
        man.scaleX=1;
        man.gotoAndPlay("walk");
        break;
  default:
        man.gotoAndStop("idle");
}
0 голосов
/ 17 февраля 2012

Одна проблема, которую я вижу, это ваши операторы if / else.

В настоящее время, если ваша правая клавиша нажата, независимо от того, нажата ли левая клавиша, будет вызываться неработающая анимация.Его нужно изменить на что-то вроде:

if(leftKeyDown || rightKeyDown)
{
    man.gotoAndPlay("walk");
}
else
{
    man.gotoAndStop("idle");
}

if(rightKeyDown)
{
    man.x += charSpeed;
    man.scaleX=1;
}
if(leftKeyDown)
{
    man.x -= charSpeed;
    man.scaleX=-1;
}

Также убедитесь, что в конце цикла анимации у вас есть вызов stop(); в конце анимации ходьбы и простоя, чтобы он не проигрывался до конца.

0 голосов
/ 17 февраля 2012

Попробуйте использовать блитинг. Вот несколько сайтов, чтобы узнать, как это сделать.

http://www.gotoandlearn.com/play.php?id=140 <- это хорошо! </strong>

http://www.gotoandlearn.com/play.php?id=147

http://www.adobe.com/devnet/flash/articles/blitting_mc.html

http://blog.flexwiz.net/spritesheet-animation-in-as3/

Вы также можете использовать TexturePacker для создания ваших блитов / спрайтов.

http://www.texturepacker.com/

Я использовал его во многих проектах, и это экономит массу времени

...