Я работаю над играми для AS3 и Box2D с подвижными платформами. Платформы анимированы во Flash, и в ActionScript я могу читать их текущее положение и настраивать физические тела в соответствии.
Однако всегда есть задержка, когда анимация на один кадр опережает физику. Я хотел исправить это, прочитав текущую позицию клипа, сохранив ее на потом, а затем вернув клип на позицию в последнем кадре.
Но когда я делаю это, он систематически отказывается сдвинуться с места.
Я написал простой тест с одним движущимся блоком, чтобы проверить идею, и у меня возникла та же проблема («movingBox» - это символ, который анимирует один символ «бокса» внутри него):
package
{
import flash.display.*;
import flash.events.*;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
m_movingBox = new MovingBoxClass();
addChild(m_movingBox);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(i_event:Event) : void
{
const box : Sprite = m_movingBox.getChildAt(0) as Sprite;
trace("frame:", m_movingBox.currentFrame, ", x:", box.x);
box.x = 0;
}
[Embed(source="../lib.swf", symbol="movingBox")]
private var MovingBoxClass:Class;
private var m_movingBox : MovieClip;
}
}
Вместо того, чтобы распечатывать позиции движущегося блока, блок просто остается на месте, и вывод трассировки выводит:
frame: 1 , x: 0
frame: 2 , x: 0
frame: 3 , x: 0
frame: 4 , x: 0
frame: 5 , x: 0
...
Есть идеи? Спасибо
ОБНОВЛЕНИЕ: Просто для ясности, если я уберу строку box.x = 0;
, окно будет перемещаться правильно, и вызов трассировки выплевывает увеличивающиеся значения для x.
ОБНОВЛЕНИЕ: Я выставил примеры:
Выход
Библиотека с «movingBox» на сцене
Файл Flash
Zip-файл, содержащий проект Flash Develop и все остальные