【问题标题】:Proper touch-input handling on Android in a game在游戏中正确处理 Android 的触摸输入
【发布时间】:2011-12-12 18:09:45
【问题描述】:

我实际上非常熟悉在 Android 中处理触摸事件。但是,我现在已经对所有内容进行了硬编码。我的意思是很多比较像 if (e.getX()<0.1*v.getX) ,对于游戏对象和 hud。

现在我实际上正在寻找正确处理触摸事件的方法。我也尝试在 Touch 上同时存储 x 和 y 值,但是这也会变得很乱,尤其是当我还必须测试 ACTION_DOWN 或 ACTION_MOVE 等时......

所以有人知道最好的“架构”吗?

【问题讨论】:

  • 不太清楚你在问什么。您的意思是您不想在游戏对象或 HUD 的代码中测试屏幕坐标?
  • 我不想处理我的 View 类中的所有内容。我不知道是否应该存储多个 x-y 变量或完整的 touchEvent 对象。或者我应该把它传递给一些东西,比如对象或者一些 TouchHandler 类?我正在寻找一种常见且最有用的方法来处理输入,也适用于 hud。

标签: java android architecture input


【解决方案1】:

您的游戏可能在不同的线程上有一个主循环,因为在 Android 中您应该远离事件线程。如果是这种情况,我会设置一个单独的InputBuffer 类来接收和存储传入的触摸事件。完成此操作后,InputBufferOnTouchListenerSurfaceView

当有传入事件时,InputBuffer 只是复制它并返回。这使事件线程保持空闲并有助于防止ANRs。

然后在主循环中,需要了解用户输入的游戏对象可以访问InputBuffer,以便他们可以获取有关存储事件的信息。这会将您的输入处理代码移出视图并进入更有意义的游戏对象中。

根据您的游戏速度,您可能还需要放置一个块,以便在游戏对象更新时传入事件不会更新存储的副本。相反,存储的副本会在主循环更新后更新,这样所有游戏对象都在处理相同的事件。

【讨论】:

  • 与其创建一个 InputBuffer 类,不如在视图的类中创建 getter 和 setter 不是那么容易吗?
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多