【发布时间】:2014-03-19 16:33:27
【问题描述】:
我正在开发一个简单的游戏,其中包含一个角色仅沿 Y 轴上下移动。
目前我正在使用加速度计读数来更改角色的 Y 速度。游戏运行良好,但最大的问题是您必须保持设备水平才能正常玩游戏。
我真正想要的是仅当沿 Y 轴的旋转速率发生变化时才更改字符 Y 速度。我需要能够将此变化率转换为角色的 Y 速度。这样,无论设备倾斜多少,用户都可以在正常握住设备的同时玩游戏。
由于加速度计在每个设备中都是强制性的,因此旧设备可以运行我的游戏,我希望能够使用从加速度计检索到的数据来计算这个变化率。
我发现了这个link,它解释了如何从加速度计数据中获取俯仰和滚动。 我使用了确切的代码并想出了这个,
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,等一下,有变化吗?如果它的变化超过了你的阈值,//做点什么。
标签: java android game-physics