首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化我的自制Flex游戏的最好方法?

优化我的自制Flex游戏的最好方法?
EN

Stack Overflow用户
提问于 2011-01-05 12:53:39
回答 1查看 157关注 0票数 0

我有一个关于用Flex制作flash游戏的问题。现在我正在开发一款2D格斗游戏,链接如下:http://xoz.netai.net/stickfightjx/StickFightJX.html

但是,我不确定我编写主循环的效率如何。

因为我从来没有读过教程,也没有看过其他的Adobe Flex游戏,所以我不知道如何实现它们。我有一个Timer实例,它每24帧调用一个update函数,更新所有的游戏对象和视图。

有没有什么方法可以让这个过程更快?我在浪费什么吗?

代码语言:javascript
复制
// 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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-05 14:44:48

你所拥有的应该可以正常工作,但你可能会在速度慢的计算机上遇到麻烦,因为那里的帧率比你预期的要低。

为了获得流畅的动画效果,您需要改为侦听ENTER_FRAME事件。update()方法应该将自最后一帧以来的时间增量作为参数。您可以使用此选项来基于时间而不是非帧进行计算。

例如:

代码语言:javascript
复制
...
// Called from your original code.
private function update():void
{
    xPos += 10;
    yPos += 5;
}
...

在这种情况下,只要调用计时器事件,更新对象的xPos和yPos成员就会分别增加10和5。在速度较慢的计算机上,CPU将无法跟上,更新之间的时间间隔将更长,并减慢整个游戏的速度,使战斗变得更容易。

更新也将与帧速率不同步,导致动画看起来起伏不定。这是因为有时在再次渲染画布之前会有多个更新,这意味着对象将为该帧将其xPos和yPos更改20和10。

代码语言:javascript
复制
...
// 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事件,所以每次渲染画布时,更新也只发生一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4600936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档