我的算法需要几秒钟才能完成。我正在尝试将其实现为我正在创建的60fps Flash游戏。我想知道ActionScript3中是否有一些规定来中断计算以便更新帧并在之后继续计算。可能没有,所以我假设最好的方法是执行x毫秒的计算,测量帧速率是什么,然后调整计算将在下一帧运行的时间,如果帧速率小于或大于60 fps。这样做的缺点是游戏不会以稳定的60fps运行......
关于如何(最佳地)在AS3中执行大型计算同时保持帧速率的任何其他想法?
编辑:对于好奇(计算,也许我应该说算法): 我正在为游戏AI对象创建一个运动规划库(一个用于运动规划)。该算法沿着RRT(快速探索随机树)的方向进行,该方法迭代数千次。
演示链接:http://www.swfcabin.com/open/1279044355
点击动画计划。圆圈可以在任何方向上“固定”一个固定的大小。
此外 - 没有线性速度阻尼(即摩擦力)。
答案 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*)