5

好吧,显然 xna 游戏只能以 30fps 运行,这很可惜,因为我们在 iphone 上的游戏在 60 帧时看起来好多了……

无论如何,因为获取有关触摸屏状态信息的唯一方法是获取其当前状态,这实际上意味着您只能以 30 fps 对触摸屏进行采样。

即使我们的游戏必须以 30fps 运行,有没有办法从触摸屏获得更高分辨率的采样?也许通过回调?或者通过访问带有时间戳的触摸事件列表?

4

2 回答 2

2

您正在寻找的功能是TouchPanel.GetState. 以 60Hz 调用此函数很简单。

要获得 60Hz,您可以设置Game.TargetElapsedTime为 1/60 秒。假设您以 30FPS 的速度进行垂直同步,这将为您每次绘制提供两次更新(根据Shawn Hargreaves 的帖子)。

如果您仍然希望您的游戏状态更新以 30FPS 运行(仅以 60FPS 进行触摸输入),那么您可以将这些更新放在不同的线程上。在第一次调用 时开始对该线程进行更新Game.Update,然后等待它在第二次调用时完成,依此类推。

(您应该注意,通常 XNA 输入必须在主线程(source)上完成。我假设这适用于电话和触摸输入。)

或者,您可以完全自己替换Game课程的时间(打电话给GraphicsDevice.Present自己)。这并不容易,但它是可能的。一个好的起点是查看GameReflector 中的类。

(免责声明:我还没有尝试过任何实际的基于电话的开发,所以可能有一些我不知道的与电话相关的陷阱。)

于 2010-08-12T11:59:41.387 回答
0

出于性能原因,设置了 30fps 的采样率。

即使您可以找到一种更频繁地查询触摸的方法,您仍然无法以更快的速度更新 UI,所以我不确定您会得到什么好处。

在花太多时间试图找到解决方案之前,我会在实际设备上进行测试,看看 30fps 到底有多可接受。

于 2010-08-12T08:59:37.407 回答