Hi all
Ich hab hier 2 kleine Probleme und bitte um eure Hilfe.
Es ist folgendes...
Erstes Problem is ein logisches. Ich verstehe nicht wieso es das macht was es macht.
Und zwar hatte ich das Problem, das wenn ich mit der Maus in eine untere Ecke gehe, geht die Kamera nach oben. Also vollkommen umgekehrt. Ich musste die Achsen wechseln und diese Negativ machen. Nur so hats funktioniert. Aber für mich ist das vollkommen unlogisch. Ich weiss nicht wieso die Kamera nach oben geht wenn diese eigentlich auf der x achse verschoben werden sollte.
Kann mir das jemand erklären?
Und das zweite Problem waere, wenn ich die Kamera auf die Seite drehe und die vorher schraeng nach oben und unten ausgerichtet war, kippt die Kamera.
Hier ein Bild, wie es aussieht.
Ich würde es gerne so machen, wie in einem Egoshooter. Wie schaff ich das?
Ich hab hier 2 kleine Probleme und bitte um eure Hilfe.
Es ist folgendes...
Erstes Problem is ein logisches. Ich verstehe nicht wieso es das macht was es macht.
Und zwar hatte ich das Problem, das wenn ich mit der Maus in eine untere Ecke gehe, geht die Kamera nach oben. Also vollkommen umgekehrt. Ich musste die Achsen wechseln und diese Negativ machen. Nur so hats funktioniert. Aber für mich ist das vollkommen unlogisch. Ich weiss nicht wieso die Kamera nach oben geht wenn diese eigentlich auf der x achse verschoben werden sollte.
Kann mir das jemand erklären?
Java:
protected void processMouseEvent(MouseEvent mouseEvent) {
//Maus initialisieren, um diese in die Mitte zu schieben
MouseEvent mouse = (MouseEvent) mouseEvent;
//Mitte des Fensters ermitteln
Component comp = mouse.getComponent();
final int centerX = comp.getLocationOnScreen().x + comp.getWidth() / 2;
final int centerY = comp.getLocationOnScreen().y + comp.getHeight() / 2;
//Ereignis der Maus
int eventId = mouseEvent.getID();
/*Es sollen keine Transformationen vorgenommen werden,
während die Maus sich nicht im Fenster befindet*/
if (eventId == MouseEvent.MOUSE_EXITED) {
outsideScreen = true;
}
/*Wenn die Maus bewegt wird, während man die linke Maustaste festhält,
bewegt sich die Kamera*/
else if (eventId == MouseEvent.MOUSE_DRAGGED) {
//Wenn es vorher ausserhalb des Fenster war, ist es jetzt nicht mehr.
if (outsideScreen) {
outsideScreen = false;
return;
}
//Der Roboter hält die Maus immer in der Mitte
try {
java.awt.Robot robot = new java.awt.Robot();
robot.mouseMove(centerX, centerY);
}
catch (Exception e) {
System.out.println(
"Kann Maus nicht in der Mitte des Fensters halten ");
}
//Macht den Mauszeiger unsichtbar
//Erstelle ein neues durchsichtiges Bild
BufferedImage image = new BufferedImage(1, 1,
BufferedImage.TYPE_INT_ARGB);
image.getAlphaRaster().setPixel(0, 0, new double[]{0, 0, 0, 0});
//Sag dem Mauszeiger, dass dieser das neue Bild verwenden soll
Cursor cursor = java.awt.Toolkit.getDefaultToolkit().createCustomCursor(
image, new Point(), "invisible");
comp.setCursor(cursor);
/*Berechnet aus der Position der Maus im Fenster, Position der Maus auf dem Bildschirm
und dem Zentrum des Fenster, um wie viel und wohin die Kamera bewegt wird*/
int relX = mouse.getX() + comp.getLocationOnScreen().x - centerX;
int relY = mouse.getY() + comp.getLocationOnScreen().y - centerY;
//Multipliziert die Kamerabewegung mit der Geschwindigkeit, damit man sich nicht zu schnell bewegt
//Original rotSpeed=0.01
rotY = relY * rotSpeed;
rotX = relX * rotSpeed;
//Führt die Rotation der Kamera aus
rotator.rotX(-rotY);
transform.mul(rotator);
rotator.rotY(-rotX);
transform.mul(rotator);
//Originalposition aus der Transformgroup wieder verwenden
Vector3d pos = new Vector3d();
{
Transform3D tmp = new Transform3D();
targetTG.getTransform(tmp);// targetTG ist die Kamera
tmp.get(pos);
}
transform.setTranslation(pos);
targetTG.setTransform(transform);
}
else if (eventId == MouseEvent.MOUSE_RELEASED) {
//Macht den Mauszeiger wieder sichtbar
c.setCursor((Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)));
}
}// end of processMouseEvent()
Und das zweite Problem waere, wenn ich die Kamera auf die Seite drehe und die vorher schraeng nach oben und unten ausgerichtet war, kippt die Kamera.
Hier ein Bild, wie es aussieht.
Ich würde es gerne so machen, wie in einem Egoshooter. Wie schaff ich das?