Показать сообщение отдельно
Старый 18.03.2015, 17:08
nzk_3000 вне форума Посмотреть профиль Отправить личное сообщение для nzk_3000 Найти все сообщения от nzk_3000
  № 1  
Ответить с цитированием
nzk_3000

Регистрация: Mar 2015
Сообщений: 2
По умолчанию Проблемы с анимацией

Недавно начал изучать actionscript 3. Сейчас пытаюсь разобраться с анимацией передвижения и возникла следующая проблема. Есть персонаж, анимации находятся в его символе(movieclip), c 1-24 кадра находится перемещение, с 25 по 44 - прыжок. Нужно сделать так, чтобы когда единоразово нажималась кнопка прыжка воспроизводилась соответствующая анимация. Все что смог придумать: либо привязывать анимацию к переменной нажатия кнопки прыжка, но тогда если отпустить эту кнопку воспроизведение анимации прекратиться, либо привязывать анимацию к моменту нахождения персонажа в воздухе, но и так воспроизведение не работает правильно(персонаж просто зависает в воздухе на первом кадре анимации, а когда приземляется воспроизводиться вся анимация персонажа начиная с текущего кадра до тех пока как-то не сдвинуть персонажа, на гифке запечатлен этот процесс). Думаю возможно каким-то образом проконтролировать воспроизведение анимации до конца и только затем воспроизводить следующую, но я не знаю как это сделать. Может кто-то уже сталкивался с подобными проблемами? не могли бы вы мне помочь?
Код ниже

Код AS3:
import flash.events.KeyboardEvent
import flash.events.Event;
stage.frameRate=30;
 
var mleft:Boolean;
var mright:Boolean;
var mjump:Boolean;
var speed:Number=0;
var accel:Number=0.7;
var fric:Number=0.6;
var gravity:Number=0;
 
character.stop();
 
stage.addEventListener(Event.ENTER_FRAME,main);
stage.addEventListener(KeyboardEvent.KEY_DOWN,walk);
stage.addEventListener(KeyboardEvent.KEY_UP,no_walk);
 
function main(e:Event){
	if (mright)
{	
	character.scaleX= scaleX;
	speed+=accel;
	character.play();
	if(character.currentFrame==24)
	character.gotoAndPlay(1);
	character.x+=speed;
}
 
	if(mleft)
{
	character.scaleX= -scaleX;
	speed-=accel;
	character.play();
	if(character.currentFrame==24)
	character.gotoAndPlay(1);
	character.x+=speed;
 
}
	if ((mright==false) && (mleft==false))
{
	speed*=fric;
	character.x+=speed;
}
 
	if (speed>10) speed=10;
	if (speed<-10) speed=-10;
 
	if(mjump&&character.hitTestObject(ground))
	{
		gravity=-15;
	}
 
	character.y+=gravity;
	if (!character.hitTestObject(ground))
	{
		character.gotoAndPlay(25);
		if (character.currentFrame<44)
		character.gotoAndPlay(25);
		gravity++;
		gravity++;
	}
	else 
	gravity=0;
 
	if (character.x-character.width/2<0)
	character.x=character.width/2;
 
	if (character.x+character.width/2>1280)
	character.x=1280-character.width/2;
}
 
function walk(e:KeyboardEvent)
{
	if (e.keyCode==39)
		mright=true;
 
	if (e.keyCode==37)
		mleft=true;
 
	if (e.keyCode==38)
		mjump=true;
}
 
 
function no_walk(e:KeyboardEvent)
{
	if (e.keyCode==39)
		mright=false;
 
	if (e.keyCode==37)
		mleft=false;
 
	if (e.keyCode==38)
		mjump=false;
 
	character.gotoAndStop(1);
 
}
Изображения