Probleme mit Mouselook

wizz07

Neues Mitglied
Hi,

Ich arbeite gerade an einem Programm, in dem man ein 3D-Objekt von allen Seiten betrachten soll.
Meine Bewegungen dafür realisiere ich über Behavior Klasse. Das Bewegen mit den Tasten funktioniert
soweit einwandfrei, nur bei der Realisierung der Mausbewegung hapert es noch. Folgendes Problem:

Ich habe mir zunächst einen einfachen Würfel darstellen lassen, auf den ich frontal drauf schaue.
Wenn ich jetzt nur nach Oben und Unten schau oder nur nach Rechts und Links geht es wunderbar,
nur wenn ich beide Bewegungen kombiniere tritt ein Fehler auf den ich nicht wegbekomme. Rotiere
ich die Maus z.B. im Uhrzeigersinn rotiert der Würfel gegen ihn und umgekehr. Das sollte er nicht
machen, da ich ja nur wie in einem FPS herumschauen möchte.

Hoffe mir kann jemand Helfen.

Java:
public class UserControl extends ViewPlatformBehavior {

	private static final double MOUSE_SPEED = 50;
	private static final double MOVE_STEP = 0.2;
	private static final int MOVE_SPEED = 25;

	private static final Vector3d FWD = new Vector3d(0, 0, -MOVE_STEP);
	private static final Vector3d BACK = new Vector3d(0, 0, MOVE_STEP);
	private static final Vector3d LEFT = new Vector3d(-MOVE_STEP, 0, 0);
	private static final Vector3d RIGHT = new Vector3d(MOVE_STEP, 0, 0);

	private int forwardKey = KeyEvent.VK_W;
	private int backKey = KeyEvent.VK_S;
	private int leftKey = KeyEvent.VK_A;
	private int rightKey = KeyEvent.VK_D;
	private int enableMouse = KeyEvent.VK_ESCAPE;

	private WakeupCondition wakeCon;
	private PanelMain main;
	
	private Robot robot;
	private int posX = 0;
	private int posY = 0;

	private Transform3D t3d = new Transform3D();
	private Transform3D toMove = new Transform3D();
	private Transform3D rotationY = new Transform3D();
	private Transform3D rotationX = new Transform3D();

	
	private boolean forward = false;
	private boolean backward = false;
	private boolean left = false;
	private boolean right = false;
	private boolean mouse = true;
	private boolean mouseFirstTime = true;

	public UserControl(PanelMain main, TransformGroup steerTG) {
		this.main = main;
		
		initViewPosition(steerTG);
	} 

	private void initViewPosition(TransformGroup steerTG)
	{
		Vector3d startPosn = new Vector3d(0, 0, 0);

		steerTG.getTransform(t3d); 
		t3d.setTranslation(startPosn); 
		steerTG.setTransform(t3d);
	} 

	public void initialize() {
		try {
			robot = new Robot();
		} catch (AWTException e) {
			e.printStackTrace();
		}
		
		WakeupCriterion[] crits = new WakeupCriterion[4]; 
 
		crits[0] = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); 
		crits[1] = new WakeupOnAWTEvent(KeyEvent.KEY_RELEASED);
		crits[2] = new WakeupOnElapsedTime(MOVE_SPEED);
		crits[3] = new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED);
		wakeCon = new WakeupOr(crits); 
		wakeupOn(wakeCon); 

	}

	public void processStimulus(Enumeration criteria)
	{
		WakeupCriterion wakeup;
		AWTEvent[] event;

		while (criteria.hasMoreElements()) {
			wakeup = (WakeupCriterion) criteria.nextElement();
			if (wakeup instanceof WakeupOnAWTEvent) {
				event = ((WakeupOnAWTEvent) wakeup).getAWTEvent();
				for (int i = 0; i < event.length; i++) {
					if (event[i].getID() == KeyEvent.KEY_PRESSED)
						processKeyEvent((KeyEvent) event[i], true);
					if (event[i].getID() == KeyEvent.KEY_RELEASED)
						processKeyEvent((KeyEvent) event[i], false);
					if (event[i].getID() == MouseEvent.MOUSE_MOVED)
						processMouseEvent((MouseEvent) event[i], true);
				}
			}
		}
		calculateMovement();
		wakeupOn(wakeCon);
	} 

	private void processKeyEvent(KeyEvent eventKey, boolean activate) {
		int keyCode = eventKey.getKeyCode();
		if (activate) activateKey(keyCode);
		else deactivateKey(keyCode);
	} 
	
	private void processMouseEvent(MouseEvent eventMouse, boolean look){
		if(look) look(eventMouse);
		System.out.println("moved");
		System.out.println("Rotation X  " + rotationX);
		System.out.println("Rotation Y  " + rotationY);
	}
	
	private void look(MouseEvent eventMouse){
		if (mouse){
			if(mouseFirstTime){
	            repositionMouse(eventMouse);
	            mouseFirstTime = false;
	        }
	        else{
	        	rotateX(-(eventMouse.getY()-posY)/MOUSE_SPEED);
	        	rotateY(-(eventMouse.getX()-posX)/MOUSE_SPEED);
	            repositionMouse(eventMouse);
	        }
		}
	}
	
	private void rotateX(double angel){ 
		targetTG.getTransform(t3d);
		rotationX.rotX((Math.PI/180)*angel);
	    t3d.mul(rotationX);
	    targetTG.setTransform(t3d);
	 }
	
	private void rotateY(double angel){
		targetTG.getTransform(t3d);
		rotationY.rotY((Math.PI/180)*angel);
	    t3d.mul(rotationY);
	    targetTG.setTransform(t3d);
	}
	
	private void repositionMouse(MouseEvent eventMouse){
        int cx = eventMouse.getComponent().getWidth()/2;
        int cy = eventMouse.getComponent().getHeight()/2;
        Point p = new Point(cx,cy);
        SwingUtilities.convertPointToScreen(p, eventMouse.getComponent());
        robot.mouseMove(p.x, p.y);
        posX = cx;
        posY = cy;
    }

	private void activateKey(int keycode){
		if (keycode == forwardKey)
			forward = true;
		else if (keycode == backKey)
			backward = true;
		else if (keycode == leftKey)
			left = true;
		else if (keycode == rightKey)
			right = true;
		else if (keycode == enableMouse){
			if (mouse) mouse = false;
			else mouse = true;
		}
	} 
	
	private void deactivateKey(int keycode){
		if (keycode == forwardKey)
			forward = false;
		else if (keycode == backKey)
			backward = false;
		else if (keycode == leftKey)
			left = false;
		else if (keycode == rightKey)
			right = false;
	}

	private void doMove(Vector3d theMove){
		targetTG.getTransform(t3d);
		toMove.setTranslation(theMove);
		t3d.mul(toMove);
		targetTG.setTransform(t3d); 
	} 
	
	private void calculateMovement(){
		if(backward) doMove(BACK);
		if(forward) doMove(FWD);
		if(left) doMove(LEFT);
		if(right) doMove(RIGHT);
	}

}
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Zum Problem kann ich leider nix beitragen. Aber zu deiner Formatierung. Siehe Anhang.
 

Anhänge

  • Lesen_hilft.png
    Lesen_hilft.png
    64 KB · Aufrufe: 29
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Scaling Probleme Spiele- und Multimedia-Programmierung 6
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
J YoutubeAPI Livestream probleme Spiele- und Multimedia-Programmierung 3
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
P Probleme mit VLCJ Spiele- und Multimedia-Programmierung 0
F Probleme bei der Soundwiedergabe Spiele- und Multimedia-Programmierung 0
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F BlueJ Ufospiel Probleme Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
M 2048, 3 kleine Probleme Spiele- und Multimedia-Programmierung 4
A Probleme mit Darstellung von Umgebungen mittels mehrdimensionaler Arrays Spiele- und Multimedia-Programmierung 8
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
J Perfomance Probleme beim eigenen Editor Spiele- und Multimedia-Programmierung 1
K Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 10
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
K Probleme mit .jar Spiele- und Multimedia-Programmierung 12
L Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 3
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
Maxim6394 Probleme bei Sidescroller Spiele- und Multimedia-Programmierung 5
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
B Probleme mit redraw() Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Steev Probleme mit Kameraausrichtung bei ISO-Map Spiele- und Multimedia-Programmierung 3
R MediaPlayer macht Probleme Spiele- und Multimedia-Programmierung 2
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
P probleme mit key event Spiele- und Multimedia-Programmierung 11
T Bekanntes Heli Spiel -> Aber Probleme damit Spiele- und Multimedia-Programmierung 30
S Probleme mit Thread beim Streaming Spiele- und Multimedia-Programmierung 1
O Ampel - Probleme mit der Farbgebung Spiele- und Multimedia-Programmierung 16
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
P Probleme mit Wolkenbewegung Spiele- und Multimedia-Programmierung 5
W Probleme mit dem setTextureCoordinate Spiele- und Multimedia-Programmierung 3
D Probleme beim Download von GIF-Bildern Spiele- und Multimedia-Programmierung 4
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
D Probleme bei ATI Karten bekannt? Spiele- und Multimedia-Programmierung 4
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
X Probleme. Spiele- und Multimedia-Programmierung 2
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
F Probleme mit selbsterstelltem transparenten PNG Spiele- und Multimedia-Programmierung 5
S probleme mit material Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
D Gomoku --- Probleme bei Instanzierung Spiele- und Multimedia-Programmierung 2
G Probleme beim installieren java 3d linux Spiele- und Multimedia-Programmierung 4
G Sound Probleme Spiele- und Multimedia-Programmierung 2
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
N Probleme mit View Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben