【问题标题】:How to swtich Accelerometer Axis based on Device?如何根据设备切换加速度计轴?
【发布时间】:2013-05-18 06:53:10
【问题描述】:

我的 android 应用程序使用 Y 轴加速度计来控制游戏中的角色。

这在大多数手机上都可以正常工作,但是在我的 Galaxy Tab 2 10.1 上,轴似乎颠倒了,我必须手动更改输入才能正常工作。

我想编写一个简单的条件语句,它可以根据设备类型进行交换,但是我不确定最好的做法是什么。我敢肯定在我问这个问题之前有人会遇到这个问题。

如何确定设备是桌子还是移动设备以更改加速度计轴?

【问题讨论】:

  • 以前从未使用过android,所以我不知道这是否是一个可行的解决方案,但你可以做的是在用户开始播放之前进行一个小的“设置”。通过设置,我的意思是让用户向右/向左/向前/向后倾斜他们的设备,以便您可以将每个倾斜方向/轴绑定到正确的游戏内方向/轴。
  • 您好,感谢您的建议。但是,我想避免用户必须这样做是可能的。我希望有一种方法可以检查轴配置和基于此的设置。

标签: java android accelerometer axis


【解决方案1】:

我认为这与设备的默认方向有关,对于手机来说往往是纵向的,对于平板电脑来说往往是横向的。这里有一个关于这个的问题:How to check device natural (default) orientation on Android (i.e. get landscape for e.g., Motorola Charm or Flipout),根据我的经验,我会说this is the best answer。要理解的重要一点是,无论显示器在做什么(横向、纵向等),传感器使用的 x-y-z 轴都不会改变。

【讨论】:

    【解决方案2】:

    我发现执行此操作的最佳方法是检查设备上的屏幕尺寸,并根据设备使用哪个轴来确定一个布尔值条件。这是经过测试的,效果很好。

    // 检查屏幕布局以确定设备是否为平板电脑。

    public boolean isTablet(Context context) {
        boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
        boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
        return (xlarge || large);
    }
    

    //长乐Accelx或Accely输入基于以上(我用 OpenGLES 1.1)

    if (isTablet(glGame)) {
        world.update(deltaTime, game.getInput().getAccelX());
    }
    if (!isTablet(glGame)) {
        world.update(deltaTime, game.getInput().getAccelY());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2016-09-25
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多