Ходячая анимация при движении в as3
Итак, у меня есть фрагмент фильма, созданный как "человек", я сделал его так, чтобы у него была такая же рамка бездействия и ходьбы. Он также может двигаться влево / вправо. (Я также заставил его атаковать, но это не имеет значения);
[Холостой ход][прогулка] Последний кадр
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 ответа
Просто выйдите из функции после того, как оператор 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");
}
Одна проблема, которую я вижу, это ваши утверждения 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();
вызовите цикл анимации в конце шага и отключите анимацию, чтобы она не воспроизводилась до конца.
Попробуйте использовать блитинг. Вот несколько сайтов, чтобы узнать, как это сделать.
http://www.gotoandlearn.com/play.php?id=140 <- это хорошо!
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 для создания ваших блитов / спрайтов.
Я использовал его во многих проектах, и это экономит массу времени