我正在尝试在Android平台上编写动作感应游戏。我将整个运动检测算法包含在onSensorChanged()函数中。问题是该函数根据输入执行不同的时间。我对函数如何执行和调用有一些疑问: -
1)如果我的函数执行了很长时间,那么2 onSensorChanged事件会被调用还是只调用最新的?
2)onSensorChanged函数是否在活动线程以外的其他线程上运行?
3)onSensorcChanged函数的多个实例是否在不同的线程上运行?变量访问是否有任何类型的同步?
4)有人能指出我在哪里可以找到有关onSensorChanged()或相关信息的详细信息吗?
5)有没有什么办法我可以先玩游戏一段时间,然后看看这些值是如何改变的,以及这些函数的执行方式有何不同?
答案 0 :(得分:6)
Sensor.TYPE_ORIENTATION
。
1)如果我的函数执行了很长时间,那么2 onSensorChanged事件会被调用还是只调用最新的?
onSensorChanged方法提供了一个事件对象(values
参数),特定传感器的值附加到该参数上。对于Sensor.TYPE_ORIENTATION
,event.values[0]
是方位角,event.values[1]
是Pitch,而event.values[2]
是Roll。 Read the Android Developers SensorEvent page要更好地理解这一点。上述值会很快更新,只有您处理这些值更改才能确定将使用哪个值更新。例如,您可以根据事件值的更改方式不断更新视图。
2)onSensorChanged函数是否在活动线程以外的其他线程上运行?
它运行在一个不同的线程上,该线程依赖于它附加到的活动(实现SensorEventListener
接口的活动或包含从{{1}创建的匿名内部类实例化的对象} object)。
3)onSensorcChanged函数的多个实例是否在不同的线程上运行?变量访问是否有任何类型的同步?
我对此不太确定,但我想他们会在更新时同步SensorEventListener
对象。是的,实现event
接口的多个类实例可以单独运行。
4)有人能指出我在哪里可以找到有关onSensorChanged()或相关信息的详细信息吗?
5)有没有什么办法我可以先玩游戏一段时间,然后看看这些值是如何改变的,以及这些函数的执行方式有何不同?
您使用的是图形还是布局?如果你正在使用图形,
活动类:
SensorEventListener
查看课程
public class YourActivity extends Activity {
MyView _view;
int sensorAccuracy;
SensorManager sensorManager;
SensorEventListener sensorListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
sensorAccuracy = accuracy;
}
public void onSensorChanged(SensorEvent event) {
//pass the values to view for display
_view.setOrientation(event.values[0],event.values[1],event.values[2]);
}
};
protected void onCreate(Bundle savedInstanceState) {
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(sensorListener,
sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST);
_view = new MyView(this);
}
}
上面的代码将在屏幕顶部显示包含更新值的文本。您会注意到这些值经常更新。同样,如果您正在使用布局,只需使用新的事件值更新文本视图。
祝你好运!