Как реализовать Mouse Look в Java3d

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

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

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

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

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


person AndyMac    schedule 25.06.2011    source источник
comment
Хорошо ... для тех, кто ищет ответ на этот вопрос, оказывается, я просто неправильно реализовал робота. Робот отлично работает для повторного центрирования мыши. download.oracle.com/javase/1.4. 2/docs/api/java/awt/Robot.html   -  person AndyMac    schedule 29.06.2011


Ответы (1)


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

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;
           }
}
}
}
person fftk4323    schedule 10.04.2013