Как реализовать Mouse Look в Java3d - PullRequest
3 голосов
/ 26 июня 2011

Я в растерянности здесь. У меня работает простой алгоритм генерации ландшафта, и у меня есть простая клавиатурная навигация, расширяющая ViewPlatformAWTBehavior и обрабатывающая мои собственные события. Это все хорошо, и я могу следовать по местности. Ура!

То, что я хотел бы сделать, это заставить работать простой "взгляд мыши". MouseRotate близко, но я ищу что-то более похожее на FPS ... где вы не собираетесь вращать камеру, вы ограничены 90 градусами по вертикали (вверх или вниз), и курсор мыши захватывается JFrame (с побегом).

Я просто не могу заставить его работать. Я могу захватить событие мыши просто отлично, и mouseMoved работает. Я мог бы, вероятно, просто использовать невидимый курсор, и это дало бы мне большую часть пути туда (возможно), но я бы застрял, пытаясь удерживать мышь на экране ... как только вы вышли кадра, мышь будет видна и перестанет вращать вид.

Я продолжаю думать, что, должно быть, ошибаюсь, потому что это должна быть довольно распространенная реализация, но я ничего не могу найти в ней.

У кого-нибудь есть указатели или ссылки?

1 Ответ

0 голосов
/ 10 апреля 2013

Если вы хотите, чтобы этот код создавал полноэкранное окно, которое поможет вам при проблемах с мышью

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