我正在使用加速度计控制角色的游戏。我的问题是:我需要使用OnSensorChanged()中无法访问的类和方法中传感器接收的值。我相信我需要在OnSensorChanged中实现回调,但我不知道该怎么做。谁能帮我吗?Android加速度计问题
回答
我相信在这篇文章(How to Define Callbacks in Android?)的答案会帮助你。
总之,创建回调接口:
// The callback interface
interface MyCallback {
void callbackCall(SensorEvent event);
}
实现的回调中是应该做计算类的接口:
class Callback implements MyCallback {
void callbackCall(SensorEvent event) {
// callback code goes here
}
}
从你的活动,你必须让通话onSensoreChanged():
// The class that takes the callback
class Worker extends Activity implements SensorEventListener {
MyCallback callback;
public void onSensorChanged(SensorEvent event) {
callback.callbackCall(event);
}
}
我希望这有助于。
UPDATE:
我假设你已经知道进程和线程(如果没有,请看看Android的文档约Processes and Threads)。
onSensorChanged方法是一个I/O,在单独的线程(而不是主UI线程)中执行I/O操作是一种很好的做法。
调用回调方法后,可以将事件存储在另一个变量中,并使用该类中的那些局部变量。
由于您正在编写游戏,因此您的应用不太可能需要每一个事件。因此,当应用程序忙于计算游戏数据时,其他事件可能会被丢弃。你可以通过设置一个“繁忙”标志(布尔值)并在这个if块中包含计算代码。
void callbackCall(SensorEvent event) {
if (!busy) {
// Set the busy flag to block other event changes
busy = true;
// callback code goes here
// Once finished, reset the busy flag to allow other events to come in
busy = false;
}
}
因此,如果我想在一个类中使用我的字符X和Y坐标,并且在另一个类中使用加速度计sensorlistener,则会调用OnSensorChanged中的回调函数,但是如何在其他类中存在event.values修改坐标?那么一旦从处理玩家位置的类中调用另一种方法,这些值是否会被抛出? – vulgarknight 2013-03-10 21:14:20
我已更新上述答案,以回答您的问题。 – Armin 2013-03-10 21:39:25
好的,所以回调在类的同一个线程上调用它?所以当回调为变量赋值时,该变量在该类中是持久的? – vulgarknight 2013-03-10 21:47:20
- 1. Android加速度计问题
- 2. SpriteKit加速度计问题
- 3. cocos2d +加速度计问题
- 4. Cocos2d加速度计问题?
- 5. Android加速度计
- 6. Android加速度计
- 7. Android加速度计精度
- 8. 加速度计的性能问题
- 9. 加速度计倾斜问题
- 10. 问题时实现加速度计(Andengine)
- 11. IOS加速度计/陀螺仪问题
- 12. Android加速度计角度计算
- 13. 加速度计在Android
- 14. Android加速度计服务
- 15. android加速度计registerListener
- 16. Android加速度计游戏
- 17. Android加速度计困难
- 18. Android加速度计读数
- 19. 科尔多瓦加速度计插件观察加速问题
- 20. Android的listactivity与加速度计滚动问题
- 21. 访问Kinect加速度计
- 22. Cocos2d摇/加速计问题
- 23. android加速度计精度极差
- 24. 更高精度的Android加速度计
- 25. Android加速度计和Android版本
- 26. Android加速度计 - 测量缓慢加速度
- 27. 代码中使用加速度计为android平板电脑构建速度计的问题
- 28. UIA加速度计检测角度问题
- 29. 角速度和计算问题
- 30. iphone GPS速度计算问题
我们可以看到一些代码吗? – Geobits 2013-03-10 20:38:28
嗯,我只是将SensorListener注册到我的加速计类中,并且在该类中有OnSensorChanged。这几乎是我的所有代码,因为没有其他工作。我得到我的加速度计值很好,但我似乎无法拿走它们并将它们保存到变量中。这就是我真正想做的事情,但变量总是只存在于OnSensorChanged内部。如果我能保存这些价值观,我就不会有更多的问题。 – vulgarknight 2013-03-10 20:48:06
为什么你不能定义一个类成员来保存由onSensorChanged传递的值。 – 2013-03-10 21:16:08