0

我正在写一个简单的倾斜游戏。让一个球朝您倾斜手机的方向在屏幕上滚动。

所以我下载了一个关于如何获取传感器数据的示例,并且效果很好(我使用旋转矩阵来避免欧拉角问题)。但后来我试图把它放到一个更大的应用程序中,但我在让它工作时遇到了一些麻烦。

我的第一个想法是在单独的线程中运行倾斜传感器,但我的类:public class TiltSensor extends Thread implements SensorEventListener 无法正常工作。我得到一轮值然后它停止。

你将如何实现这个应用程序?

我不想阻塞 UI 线程,所以我想我需要一个单独的线程(GameHandler)来运行游戏,然后我调用 runOnUithread 并从那里使视图无效。我还将电路板表示与视图分开,因此我将屏幕表示为矩阵,然后视图将使用该矩阵来了解屏幕的外观。但我不确定实现 TiltSensor 的最佳方式是什么。它应该与 GameHandler 在单独的线程中运行还是在同一个线程中运行?如何确保 SensorManager 实际调用 GameHandler 线程中的 onSensorChanged?

4

1 回答 1

1

以我卑微的经验,你应该:

A) 在你的主线程上正常注册你的 SensorListener,但是让它在它的构造函数上产生两个(或根据需要)WorkerThreads。

B) 获取两个线程的 looper 引用,以使它们保持活动状态以等待未来的请求。

B)在你的主线程上正常收听你的 onSensorChanged,但不做任何其他事情(这很重要),然后将值的副本委托给一个新的可运行对象,该对象将处理你的游戏逻辑。

C)相应地将新的可运行对象排入您的 WorkerThread looper 引用。

D) 让可运行对象(已经脱离主线程)做他们必须做的事情,并将更改同步到一个单例,有兴趣更新您的视图的人可能会咨询该单例。

于 2013-10-08T22:01:47.883 回答