我有一个关于用Flex制作flash游戏的问题。现在我正在开发一款2D格斗游戏,链接如下:http://xoz.netai.net/stickfightjx/StickFightJX.html
但是,我不确定我编写主循环的效率如何。
因为我从来没有读过教程,也没有看过其他的Adobe Flex游戏,所以我不知道如何实现它们。我有一个Timer实例,它每24帧调用一个update函数,更新所有的游戏对象和视图。
有没有什么方法可以让这个过程更快?我在浪费什么吗?
// This is in an MXML Application
private var timer:Timer = new Timer(1 / 24);
private function onInitialize(e:Event):void
{
timer.addEventListener(TimerEvent.TIMER, onUpdate);
timer.start();
}
private function onUpdate(e:TimerEvent):void
{
gameStateManager.update();
}发布于 2011-01-05 14:44:48
你所拥有的应该可以正常工作,但你可能会在速度慢的计算机上遇到麻烦,因为那里的帧率比你预期的要低。
为了获得流畅的动画效果,您需要改为侦听ENTER_FRAME事件。update()方法应该将自最后一帧以来的时间增量作为参数。您可以使用此选项来基于时间而不是非帧进行计算。
例如:
...
// Called from your original code.
private function update():void
{
xPos += 10;
yPos += 5;
}
...在这种情况下,只要调用计时器事件,更新对象的xPos和yPos成员就会分别增加10和5。在速度较慢的计算机上,CPU将无法跟上,更新之间的时间间隔将更长,并减慢整个游戏的速度,使战斗变得更容易。
更新也将与帧速率不同步,导致动画看起来起伏不定。这是因为有时在再次渲染画布之前会有多个更新,这意味着对象将为该帧将其xPos和yPos更改20和10。
...
// Called from ENTER_FRAME with the time since the last call passed in.
private function update(deltaT:Number):void
{
xPos += 10 * deltaT;
yPos += 5 * deltaT;
}
...在这种情况下,无论xPos有多慢,更新对象都会分别以每秒10和5的速度更改它的成员(如果您的deltaT是以秒为单位的话)。由于您使用的是ENTER_FRAME事件,所以每次渲染画布时,更新也只发生一次。
https://stackoverflow.com/questions/4600936
复制相似问题