0

好的,这就是问题所在。目前我正在为我的游戏编写一个 OCX/NPAPI 插件,因此我的游戏可以在网络浏览器中运行。在当前的实现中,我使用 SetTimer 来“勾选”我的游戏(插件 dll)的更新和渲染,但我发现我的机器上的 FPS(每秒帧数)最多只能是 64。我发现是windows timer的问题,因为timer只能被浏览器插件实现的message peeking进程调用,我无法修改,也就是说timer不能快于浏览器的进程处理速度。


所以我的问题是,

  1. 我可以打破浏览器消息处理限制的 64 帧速率或加快计时器进程吗?
  2. 或者我应该将我的游戏移动到一个单独的线程,但是如何处理窗口消息(用户输入、窗口大小调整等)并且游戏线程可以接收。

提前致谢!

4

1 回答 1

1

如果您使用的是窗口插件,那么最好的办法是在单独的线程上进行所有渲染等。只需使用某种线程安全队列或其他东西来跨线程传递窗口消息;当然,使用互斥锁很有趣,但这并不是那么难。

如果您使用的是 FireBreath(这会为您简化很多),那么您可以使用一个 FB::SafeQueue 类。如果你不使用 FireBreath,你可以偷走它,虽然它需要提升,但无论如何创建一个线程安全的消息队列并不是那么难。

如果您在主线程上尝试执行所有游戏逻辑,则无论如何您都可能会遇到性能问题。

如果它是一个无窗口插件,那么你就不走运了。

于 2013-07-06T15:57:49.123 回答