我有一个触摸屏,我想用它来移动我的相机。我的当前代码通过将缩放为1的camera.direction矢量添加到位置矢量来移动摄像机。似乎我不能用比一个更少的东西,因为当我这样做的时候,它开始奇怪地旋转。我想使用
touchpad.getKnobPercentX()
touchpad.getKnobPercentY()
方法根据旋钮的位置对其进行刻度。这方面的问题是,它返回的值小于1。任何超过一个的东西都会把相机移动得太快。这是我用来更新我的相机的代码,因为我不能使用Touchpad旋钮。
private void setKnobAction() {
if (pad.getKnobPercentY() > 0f) {
camera.position.add(camera.direction.scl(1f));
camera.update();
}
if (pad.getKnobPercentY() < 0f) {
camera.position.sub(camera.direction.scl(1f));
camera.update();
}
if (pad.getKnobPercentX() > 0f) {
right = camera.direction.cpy().crs(Vector3.Y).nor();
camera.position.add(right.scl(1));
camera.update();
}
if (pad.getKnobPercentX() < 0f) {
right = camera.direction.cpy().crs(Vector3.Y).nor();
camera.position.sub(right.scl(1));
camera.update();
}
}
这个方法在我的render()方法中被调用,所以它被多次调用。而且,如果knobPercent为0,它将开始奇怪地旋转。
发布于 2014-10-27 07:44:09
Vector3.scl(float scalar)
的javadoc说:
用标量缩放这个向量
这意味着,您实际上缩放了camera.direction
向量。
假设direction
向量通常是长度为1的Vector3
,给出每个轴的百分比,您应该注意到这个问题。
放大后,每个帧的移动速度会更快,缩小后,每个帧的移动速度也会变慢。
例如:你向x方向移动,你的camera.direction
是Vector3(1, 0, 0)
.你把它按2刻度。
现在是Vector3(2, 0, 0)
,你在这个框架中移动两个单位。再次,它是缩放的,在下一个帧中是Vector3(4,0,0),在这个框架中移动4个单元。就这样一直持续下去。
同样的情况也适用于比例低于1的情况。
更糟糕的是带有零的缩放,因为它将camera.direction
的长度设置为零。这意味着,你已经没有任何关于方向的信息了,这导致了奇怪的旋转。
所以你应该做的是:
存储另一个Vector3
,将camera.direction
的值复制到它(在每个帧的开头),按getKnobPercentY()
缩放它(实际上您应该按getKnobPercentY() * delta * speed
缩放它)并将其添加到这个位置。
然后再次重置这个向量(将camera.direction
的值复制到它),并对x-值做同样的事情(现在使用crs(Vector3.Y)
)
https://stackoverflow.com/questions/26576594
复制相似问题