2012-03-13 74 views
1

我正在嘗試在我的項目中製作第一人稱相機。我跟着這個教程jogl - 第一人稱相機

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

請稍微擴大一下「很奇怪」。請提供有關此問題的更多詳細信息 – 2012-03-13 00:08:58

+0

攝像頭看起來不正常。對於所有方向和非常不連貫的方向移動都不一樣。 – enkor 2012-03-13 00:15:15

回答

1

問題在於java如何從canvas獲取點。所以,如果我改變

Point p = e.getPoint(); 

Point p = MouseInfo.getPointerInfo().getLocation(); 

它的工作原理。

對不起,對於遲到的答案。我忘記了這個問題。

0

我會嘗試放入計時器並且每隔一段時間更新一次 - 如果每次鼠標移動時都嘗試重新計算幀,則可能會超負荷運行。