所以我正在开发一款游戏,如果你向左倾斜设备,屏幕上的一个物体向左移动,如果你向右倾斜设备,屏幕上的物体向右移动。
我的所有设备(三星Galaxy S5,三星Galaxy 3平板电脑和中兴直通电话)都可以正常使用。但是我发布了一个测试版和我的一个朋友,他们有平板电脑;三星Galaxy 2 10英寸。在它上面,左右移动不起作用,但他必须上下倾斜它才能左右移动。看起来几乎就像传感器旋转一样。但是游戏被锁定在"肖像"位置。在某些设备上是否有可能传感器可能被旋转或以这样的方式实现,即向上和向下传播"左"向量被改变了?
答案 0 :(得分:1)
我遇到了同样的问题,您需要在设置该对象的重力之前获取设备默认方向。
public int getDeviceDefaultOrientation() {
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Configuration config = getResources().getConfiguration();
int rotation = windowManager.getDefaultDisplay().getRotation();
if ( ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) &&
config.orientation == Configuration.ORIENTATION_LANDSCAPE)
|| ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) &&
config.orientation == Configuration.ORIENTATION_PORTRAIT)) {
return Configuration.ORIENTATION_LANDSCAPE;
} else {
return Configuration.ORIENTATION_PORTRAIT;
}
}
例如在我的情况下我使用了box2d,代码就是这样的
if (box2dUtils.getWorld() != null) {
int orient=getDeviceDefaultOrientation();
if(orient==1){
box2dUtils.getWorld().setGravity(new Vec2(xaccel,yaccel));
}
else if(orient==2){
box2dUtils.getWorld().setGravity(new Vec2(-yaccel,-xaccel));
}// initially Vec2(xaccel, yaccel);
else{
box2dUtils.getWorld().setGravity(new Vec2(xaccel,yaccel));
}
}