我在Android应用中使用jMonkey生成了3D叠加层。一切都很好 - 我的忍者模型走在循环中。 Awsome!
现在我想根据手机的方向旋转相机。我认为罗盘是最好的方法,但不幸的是我有很多问题。所以我走了
我创建了在活动中调用的方法
public void rotate(float x, float y, float z) {
Log.d(TAG, "simpleUpdate: Nowa rotacja: " + y);
newX = x;
newY = y;
newZ = z;
newPosition = true;
}
简单更新'方法I以这种方式管理
if(newPosition && ninja != null) {
Log.d(TAG, "simpleUpdate: rotacja: " + newY);
ninja.rotate((float)Math.toRadians(newX), (float)Math.toRadians(newY), (float)Math.toRadians(newZ));
newPosition = false;
}
在我的活动中,我正在检查手机是否已移动
if(lastAzimuth != (int)azimuthInDegress) {
lastAzimuth = (int)azimuthInDegress;
我转向int因此失真不会是一个大问题
if ((com.fixus.towerdefense.model.SuperimposeJME) app != null) {
((com.fixus.towerdefense.model.SuperimposeJME) app).rotate(0f, azimuthInDegress, 0f);
}
目前我想只在Y轴上旋转
现在主要的问题是旋转更像是跳转。当我移动我的手机并且我有6度的差异(我在我的日志中看到这个)时,模型旋转90度并且他转回去。这与我的康帕斯的轮换或改变无关。
有什么想法吗?
更新
我想我明白了。方法旋转,从当前状态旋转,值I设置。所以它看起来更像old Y rotate + new value
。因此,我设置当前值和旧值之间的差异,现在看起来很好。这是好方法吗?