我正在开发一个简单的游戏,其中包括一个角色沿着Y轴上下移动。目前我正在使用加速度计读数来改变角色的Y速度。游戏运行良好,但最大的问题是必须保持设备水平才能正确玩游戏。
我真正想要的是只有在Y轴旋转率发生变化时才改变角色的Y速度。我需要能够将这种变化率转换为角色的Y速度。通过这种方式,无论设备倾斜多少,用户都可以正常持握设备玩游戏。
由于加速度计在每个设备中都是必需的,因此旧设备也可以运行我的游戏,我希望能够使用从加速度计检索到的数据来计算这种变化率。
我找到了这个链接,它解释了如何从加速度计数据中获取俯仰和滚转。我使用了完全相同的代码,并得出了以下结果,
我真正想要的是只有在Y轴旋转率发生变化时才改变角色的Y速度。我需要能够将这种变化率转换为角色的Y速度。通过这种方式,无论设备倾斜多少,用户都可以正常持握设备玩游戏。
由于加速度计在每个设备中都是必需的,因此旧设备也可以运行我的游戏,我希望能够使用从加速度计检索到的数据来计算这种变化率。
我找到了这个链接,它解释了如何从加速度计数据中获取俯仰和滚转。我使用了完全相同的代码,并得出了以下结果,
final double alpha = 0.5;
double fXg = 0;
double fYg = 0;
double fZg = 0;
fXg = game.getInput().getAccelX() * alpha + (fXg * (1.0 - alpha));
fYg = game.getInput().getAccelY() * alpha + (fYg * (1.0 - alpha));
fZg = game.getInput().getAccelZ() * alpha + (fZg * (1.0 - alpha));
double pitch = (Math.atan2(-fYg, fZg) * 180.0) / Math.PI;
double roll = (Math.atan2(fXg, Math.sqrt(fYg * fYg + fZg * fZg)) * 180.0) / Math.PI;
pitch = (pitch >= 0) ? (180 - pitch) : (-pitch - 180);
使用这段代码,我无法理解如何计算变化率。
我是否朝着正确的方向前进,还是完全不同于我想要的?
如果只依赖陀螺仪而不是加速度计,这样做是否更好?
提前致谢。
fYg
,等待一段时间,它是否发生了变化?如果它的变化超过了你的阈值,就执行某些操作。 - Sionnach733