AS3中的计时器不能足够快

时间:2012-05-29 01:22:39

标签: actionscript-3 actionscript timer

我正在AS3制作一款游戏,需要在极短的时间内按顺序发射大量的子弹。例如,在某个时刻,我需要每1-5毫秒发射一颗子弹约1秒钟。游戏以60 FPS(平滑)运行,屏幕上有大约800多个对象,但是计时器似乎不能比我的帧率更快(大约每16毫秒一次)。我只有一个enterFrame,其他所有内容都会更新。

任何提示?

2 个答案:

答案 0 :(得分:0)

你怎么可能在屏幕上有800多个对象?每个对象是一个像素还是整个屏幕刚填充?我的意思是公平地说我在我面前有一个1920x1080的屏幕,所以每个物体可能是2像素宽,2像素高,它不会完全填满整个屏幕宽度1600x1600。我只是好奇为什么你会有这样的场景,因为我一直在玩游戏开发。

对于技术问题,定时器不能保证在持续时间到期后(仅在一段时间后)被触发,这取决于它能够以多快的速度处理定时器滴答的代码。我的猜测是有这么多的对象正在耗尽CPU(在* NIX系统上使用top在控制台中查看或在Windows中使用任务管理器是否它是CPU的核心?)。这可能会确认或拒绝它,或者如果您关闭对象的创建/更新,并查看计时器本身是否以正确的速率打勾。如果其中任何一个为真,则表明CPU正在达到峰值。

考虑使用Stage3D将对象绘图卸载到GPU以释放CPU以运行Timer。您可能还想考虑一个像flixel这样的“游戏框架”来帮助管理您的资源,虽然我不知道它利用了GPU ......实际上只是谷歌搜索并发现了一个有趣的帖子讨论它:

http://forums.flixel.org/index.php?topic=6101.0

答案 1 :(得分:0)

16毫秒听起来是正确的...... According to the docs它的分辨率不小于16.6秒。

delay:Number - 定时器事件之间的延迟,以毫秒为单位。建议不要延迟低于20毫秒。定时器频率限制为每秒60帧,这意味着低于16.6毫秒的延迟会导致运行时问题。

我建议您在屏幕外,在不同的偏移处,在每个刻度上创建x个对象(项目符号),以便在1秒内获得所需的对象数量。这假设您的上下文允许屏幕外的敌人射击。