如何在Java3d中实现Mouse Look

时间:2011-06-25 21:58:31

标签: java-3d

我在这里不知所措。我有一个简单的地形生成算法,我通过扩展ViewPlatformAWTBehavior并处理我自己的事件来实现一些简单的键盘导航。这一切都很好,我可以跟随地形。万岁!

我想做的是让一些简单的“鼠标外观”工作。 MouseRotate很接近,但我正在寻找更像FPS的东西......在你不打算相机的情况下,你被限制在90度垂直(向上或向下),并且鼠标光标被捕获JFrame(有逃脱)。

我似乎无法让它发挥作用。我可以很好地捕获鼠标事件,并且mouseMoved可以工作。我可能只是使用一个不可见的光标,这会让我在那里(可能)的很大一部分,但是当我试图将鼠标放在屏幕上时我会被卡住......一旦你出去了对于框架,鼠标将可见并停止旋转视图。

我一直在想我一定是在犯这个错误,因为这必须是一个相当普遍的实现,但我找不到任何东西。

有没有人有一些指针或参考?

1 个答案:

答案 0 :(得分:0)

如果你想要这个是制作全屏窗口的代码,它可以帮助你解决鼠标问题

package fullscreen;

import java.awt.*; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;   

public class FullScreen extends JFrame{

private JPanel contentPane = new JPanel();
private JButton fullscreenButton = new JButton("Fullscreen Mode");
private boolean Am_I_In_FullScreen = false;
private int PrevX,PrevY,PrevWidth,PrevHeight;

public static void main(String[] args) {
     FullScreen frame = new FullScreen();
     frame.setSize(600,500);
     frame.setVisible(true);
}

public FullScreen(){
    super("My FullscreenJFrame");

    setContentPane(contentPane);
    //From Here starts the trick

    FullScreenEffect effect = new FullScreenEffect();

    fullscreenButton.addActionListener(effect);

    contentPane.add(fullscreenButton);
    fullscreenButton.setVisible(true);

}

private class FullScreenEffect implements ActionListener{
    @Override
public void actionPerformed(ActionEvent arg0) {

         if(Am_I_In_FullScreen == false){

                  PrevX = getX();
      PrevY = getY();
      PrevWidth = getWidth();
      PrevHeight = getHeight();

      dispose(); //Destroys the whole JFrame but keeps organized every Component                               
                  //Needed if you want to use Undecorated JFrame
                  //dispose() is the reason that this trick doesn't work with videos
                  setUndecorated(true);


 setBounds(-10,-100,getToolkit().getScreenSize().width+30,getToolkit()
.getScreenSize().height+110);
        setVisible(true);
                        Am_I_In_FullScreen = true;

          }
           else{
                setVisible(true);

                setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
                dispose();
    setUndecorated(false);
    setVisible(true);
                Am_I_In_FullScreen = false;
           }
}
}
}