Я кодирую игру во вспышке AS3, и я реализовал свой игровой цикл, используя приведенный здесь ответ: Is this a good implementation of the gameloop Однако после увеличения позиции y моего мувиклипа на dist (dist is от скорости * timeElapsed) положение y мувиклипа становится отрицательным. Я заметил это отрицательное значение, отслеживая позицию мувиклипов при каждом обновлении.Позиция MovieClip Y становится отрицательной в цикле обновления с использованием дельта-времени
См код:
public class GameWorld extends MovieClip {
var speed:Number = 250;
var balls:Array = [];
private var _lastTime:Number = 0;
public function GameWorld() {
createballs();
this.addEventListener(Event.ENTER_FRAME, loop);
}
public function loop(e:Event):void
{
var now = new Date().getTime();
var _delta = now - _lastTime;
_lastTime = now;
updateGameState(_delta/1000);
}
public function updateGameState(timeElapsed:Number):void
{
var dist:Number = speed * timeElapsed;
balls[0].y += dist;
trace(balls[0].y);
}
public function createballs():void
{
for(var i:int = 0; i < 1; i++)
{
var ball:Ball = new Ball();
ball.y = 100;
ball.x = 100;
addChild(ball);
balls.push(ball);
}
}
}
Я хотел бы знать, что является причиной этого внезапного отрицательного значения мувиклипов у позиции.
Никогда не рассчитывайте, что местное время может идти только вперед. Даже 'flash.utils.getTimer' может быть простым. Также проверьте, не потеряла ли ваша 'скорость' где-то. EDIT: вы должны инициализировать 'private var _lastTime: Number = 0;' с правильным значением, прежде чем вы начнете цикл игры, иначе вы получите первый приращение как ОЧЕНЬ странное значение. – Vesper
Привет, когда я отслеживаю значение дельта, он всегда положителен, а также var dist в каждом цикле. – dawyda254