我正在尝试在我的项目中制作第一人称照相机。我按照本教程
http://www.morrowland.com/apron/tutorials/gl/gl_camera_3b.zip
键盘移动正常,但鼠标移动很奇怪。我正在使用java + jolg,但我认为没有太大区别
以下是负责旋转的两种方法:
public void rotate(float speed) {
aux = mView.minus(mPos);
mView.z = (float) (mPos.z + Math.sin(Math.toRadians(speed)) * aux.x + Math.cos(Math.toRadians(speed))
* aux.z);
mView.x = (float) (mPos.x + Math.cos(Math.toRadians(speed)) * aux.x - Math.sin(Math.toRadians(speed))
* aux.z);
}
public void mouseMove(float x, float y) {
float angle_y = 0.0f;
float angle_z = 0.0f;
if ((x == w/2) && (h/2 == y))
return;
robot.mouseMove(w / 2, h / 2);
angle_y = (float) ((w / 2 - x)) / 1000;
angle_z = (float) ((h / 2 - y)) / 1000;
mView.y += angle_z * 2;
if ((mView.y - mPos.y) > 8)
mView.y = mPos.y + 8;
if ((mView.y - mPos.y) < -8)
mView.y = mPos.y - 8;
rotate(-angle_y); // Rotate
}
并且有听众:
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
camera.mouseMove((float)p.getX(),(float) p.getY());
}
答案 0 :(得分:1)
问题在于java如何从画布获得点。所以如果我改变了
Point p = e.getPoint();
到
Point p = MouseInfo.getPointerInfo().getLocation();
有效。
对不起,迟到了。我忘记了这个问题。
答案 1 :(得分:0)
我会尝试加入一个计时器并且每隔一段时间才更新一次 - 如果你试图在每次鼠标移动时重新计算框架,你就可以超载自己。