Я создаю флеш-игру, основанную на старом Pacman, и я не уверен, что это лучший способ управлять анимацией.Лучшие практики: ENTER_FRAME против таймера
Как я понимаю, эти игры первоначально зависели от игрового цикла, который работал быстрее или медленнее в зависимости от процессора, поэтому я полагаю, что наиболее похожим на использование будет событие ENTER_FRAME.
Это, однако, представляет проблему необходимости иметь определенную частоту кадров и менять ее позже, не говоря уже о том, что она ограничена очень немногими «скоростями» (см. Ниже). Примером может быть то, что спрайт должен перемещать 12 пикселей до того, как будет определено следующее движение. Если скорость затем 4 пикселей на кадр, математика довольно проста:
[...]
public var stepCount:uint = 0;
[...]
function enterFrameHandler(e:Event):void
{
if(stepCount==0) {
//Some code to evaluate next move. Let's say it evaluates to MOVE RIGHT
}
if(MOVE_RIGHT)
{
x += 4;
}
stepCount++;
if(stepCount > 2)
{
stepCount = 0; //Now ready to evaluate direction again.
}
}
Это все работает отлично, но давайте скажем, что я хочу, спрайт, чтобы переместить 5 пикселей на кадр. Тогда количество кадров перед следующей оценкой не будет вычисляться. StepSize должен быть кратным 12, что ограничивает различные возможные скорости (1,2,3,4 и 6 пикселей на кадр).
Вот почему я попытался основать движение на таймере вместо этого, и мне также удалось работать, но движение было несколько неустойчивым, и казалось, что Таймер использует гораздо больше памяти, чем событие ENTER_FRAME. Вместо равномерного движения Таймер заставил спрайт замедляться и ускоряться и замедляться снова.
Другим возможным решением может быть класс Tween, но он кажется экстравагантным.
У кого-нибудь есть опыт работы с лучшими в других играх?
Morten Twellmann
Конечно, это имеет смысл! Большое спасибо. – 2009-09-18 06:32:44
Это основная вещь, которую нужно сделать, но не сделает движение в конечном счете гладким, как я испытал в своей теме: http://stackoverflow.com/questions/1284886/optimizing-transition-movement-smoothness-for-a-2d-flash- игра - казалось, что лучше было перемещать фон в обратном направлении игрока. Однако я не знаю, почему. – Tom
Единственная проблема, с которой я столкнулся, - это сложная физика, в которой большие временные шаги заставляли некоторые из моих симуляций выходить из себя. PS рада видеть, что ты решил свою проблему. Том :) – Allan