【发布时间】:2017-07-01 08:53:08
【问题描述】:
我正在用 Flash AS3 编写游戏,并使用此处提供的答案实现了我的游戏循环:Is this a good implementation of the gameloop 但是,在将我的影片剪辑的 y 位置增加 dist(dist 来自速度 * timeElapsed)后,影片剪辑的 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);
}
}
}
我想知道是什么导致了movieclips y位置突然出现负值。
【问题讨论】:
-
永远不要算本地时间只能往前走。甚至
flash.utils.getTimer也不能直截了当。还要检查您的speed是否在某处没有得到否定。编辑:您应该在开始游戏循环之前使用正确的值初始化private var _lastTime:Number = 0;,否则您将获得第一个增量作为非常奇怪的值。 -
嗨,当我跟踪 delta 值时,它始终为正,每个循环中的 var dist 也是如此。
标签: actionscript-3 flash-cs5 flash