我正在用AS3做一个游戏,它需要在极短的时间内连续发射大量的子弹。例如,在某个时刻,我需要每隔1-5毫秒发射一颗子弹,持续大约1秒。游戏以60fps的速度(流畅地)运行,屏幕上有大约800+对象,但计时器似乎不能比我的帧率更快(大约每16毫秒一次)。我只有一个enterFrame在运行,其他的一切都是从它更新的。
有什么建议吗?
发布于 2012-05-30 17:47:31
16毫秒听起来是对的……According to the docs它的分辨率不低于16.6秒。
延迟:数字-计时器事件之间的延迟,以毫秒为单位。延迟不建议小于20毫秒。计时器频率限制为每秒60帧,这意味着低于16.6毫秒的延迟会导致运行时问题。
我建议你在屏幕外创建x个对象(项目符号),在不同的偏移量上,在每个刻度上,以便在1秒内获得所需数量的对象。这假设您的上下文允许屏幕外的敌人射击。
发布于 2012-05-29 09:38:03
你怎么可能在屏幕上有800+对象呢?每个对象是单个像素,还是整个屏幕都被填满了?公平地说,我面前有一个1920x1080的屏幕,所以每个对象可以是2个像素宽,2个像素高,它不会完全填满整个屏幕宽度1600x1600。我只是好奇为什么你会有这样的场景,因为我一直在玩游戏开发。
至于技术问题,不能保证计时器在持续时间到期后的某个时刻(只是在一段时间之后)被触发,这取决于它能够以多快的速度处理计时器滴答的代码。我的猜测是拥有如此多的对象正在耗尽CPU (在*NIX系统上使用top在控制台中查看,或者在Windows中使用任务管理器来查看它是否达到cpu的一个核心的峰值?)。这可能会确认或拒绝它,或者如果您关闭对象的创建/更新,然后查看计时器本身是否以正确的速率滴答作响。如果其中任何一个为真,则表明CPU正在达到峰值。
考虑使用Stage3D将对象绘图卸载到图形处理器,以释放CPU来运行计时器。你可能还想考虑像flixel这样的“游戏框架”来帮助管理你的资源,尽管我不知道它是否利用了GPU……实际上我只是在谷歌上搜索了一下,发现了一个有趣的帖子在讨论这个问题:
http://forums.flixel.org/index.php?topic=6101.0
https://stackoverflow.com/questions/10792098
复制相似问题