java-3d之如何在Java3d中实现Mouse Look

telwanggs 阅读:15 2024-02-27 23:08:18 评论:0

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

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

我似乎无法让它工作。我可以很好地捕获鼠标事件,并且 mouseMoved 可以正常工作。我可能只使用一个不可见的光标,这会让我完成大部分工作(也许),但是当我试图将鼠标保持在屏幕上时我会被卡住......一旦你出去框架,鼠标将可见并停止旋转 View 。

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

有没有人有一些指点或引用?

请您参考如下方法:

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

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; 
           } 
} 
} 
} 


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号