好吧,显然 xna 游戏只能以 30fps 运行,这很可惜,因为我们在 iphone 上的游戏在 60 帧时看起来好多了……
无论如何,因为获取有关触摸屏状态信息的唯一方法是获取其当前状态,这实际上意味着您只能以 30 fps 对触摸屏进行采样。
即使我们的游戏必须以 30fps 运行,有没有办法从触摸屏获得更高分辨率的采样?也许通过回调?或者通过访问带有时间戳的触摸事件列表?
好吧,显然 xna 游戏只能以 30fps 运行,这很可惜,因为我们在 iphone 上的游戏在 60 帧时看起来好多了……
无论如何,因为获取有关触摸屏状态信息的唯一方法是获取其当前状态,这实际上意味着您只能以 30 fps 对触摸屏进行采样。
即使我们的游戏必须以 30fps 运行,有没有办法从触摸屏获得更高分辨率的采样?也许通过回调?或者通过访问带有时间戳的触摸事件列表?
您正在寻找的功能是TouchPanel.GetState
. 以 60Hz 调用此函数很简单。
要获得 60Hz,您可以设置Game.TargetElapsedTime
为 1/60 秒。假设您以 30FPS 的速度进行垂直同步,这将为您每次绘制提供两次更新(根据Shawn Hargreaves 的帖子)。
如果您仍然希望您的游戏状态更新以 30FPS 运行(仅以 60FPS 进行触摸输入),那么您可以将这些更新放在不同的线程上。在第一次调用 时开始对该线程进行更新Game.Update
,然后等待它在第二次调用时完成,依此类推。
(您应该注意,通常 XNA 输入必须在主线程(source)上完成。我假设这适用于电话和触摸输入。)
或者,您可以完全自己替换Game
课程的时间(打电话给GraphicsDevice.Present
自己)。这并不容易,但它是可能的。一个好的起点是查看Game
Reflector 中的类。
(免责声明:我还没有尝试过任何实际的基于电话的开发,所以可能有一些我不知道的与电话相关的陷阱。)
出于性能原因,设置了 30fps 的采样率。
即使您可以找到一种更频繁地查询触摸的方法,您仍然无法以更快的速度更新 UI,所以我不确定您会得到什么好处。
在花太多时间试图找到解决方案之前,我会在实际设备上进行测试,看看 30fps 到底有多可接受。