在游戏中进行多次第二次计算,同时保持60 FPS

时间:2010-07-12 20:04:09

标签: actionscript-3 game-engine

我的算法需要几秒钟才能完成。我正在尝试将其实现为我正在创建的60fps Flash游戏。我想知道ActionScript3中是否有一些规定来中断计算以便更新帧并在之后继续计算。可能没有,所以我假设最好的方法是执行x毫秒的计算,测量帧速率是什么,然后调整计算将在下一帧运行的时间,如果帧速率小于或大于60 fps。这样做的缺点是游戏不会以稳定的60fps运行......

关于如何(最佳地)在AS3中执行大型计算同时保持帧速率的任何其他想法?

编辑:对于好奇(计算,也许我应该说算法): 我正在为游戏AI对象创建一个运动规划库(一个用于运动规划)。该算法沿着RRT(快速探索随机树)的方向进行,该方法迭代数千次。

演示链接:http://www.swfcabin.com/open/1279044355

点击动画计划。圆圈可以在任何方向上“固定”一个固定的大小。

此外 - 没有线性速度阻尼(即摩擦力)。

3 个答案:

答案 0 :(得分:2)

你能分阶段进行“计算”,然后每帧只做一个阶段直到完成吗?将它拆分成你知道可以放入框架的块,并随着时间的推移进行。

几个例子:

我在一个游戏中研究了实体之间的计算视线。花了很长时间,硬件不是很强大,所以我们每帧只更新一个物体的视线。玩家的视线每隔一帧更新一次,敌人在中间帧中循环更新。

如果您正在根据大型数据集计算某些内容,请将该数据划分为较小的块,并且每帧只执行一个块。例如,如果你需要找出离你最近的恒星,并且有一百万颗恒星,那么每帧可能只有一颗星。

也许你的计算不容易映射到其中任何一个;如果你有一个你想要完成的例子,它会非常有帮助!

答案 1 :(得分:2)

根据您的计算类型,您可以编写一个Pixel Bender Kernel,使用ShaderJob在后台进行处理:

http://www.boostworthy.com/blog/?p=243

http://www.huesforalice.com/project/47

另外,这是指向如何在Actionscript中实现伪线程的教程的另一个链接:http://blogs.adobe.com/aharui/2008/01/threads_in_actionscript_3.html

答案 2 :(得分:0)

更新: 自11.4以来,Flash播放器一直支持workers

后台工作人员允许在后台执行任务,而不会阻止主工作者,这似乎非常适合您的需求。作为一个很好的奖励,在多核cpu上,后台工作人员将能够并行运行而不会减慢主要工作人员

AIR Mobile暂时不支持iO上的工作人员(AIR 4.0& AIR 13 beta)..

另外,正如其他人已经说过的那样,寻路不应该那么久!你应该考虑使用另一种算法,因为 Rapid 一种算法不兼容,这种算法需要几秒钟才能完成。最着名的路径寻找算法是A star (A*)