mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-24 20:29:44 +01:00
Hinzugefügt Kamera und 1. Spielfigut
This commit is contained in:
parent
5fde7451c8
commit
1c99da4fc5
@ -5,51 +5,55 @@ import com.jme3.math.Vector3f;
|
||||
import com.jme3.renderer.Camera;
|
||||
|
||||
/**
|
||||
* CameraController steuert die Bewegung der Kamera in einem Kreis um eine Zielposition.
|
||||
* Steuert die Kamerabewegung in der Szene.
|
||||
*/
|
||||
public class CameraController {
|
||||
|
||||
private final Camera camera; // Die Kamera, die gesteuert wird
|
||||
private final Vector3f target; // Zielpunkt, den die Kamera fokussieren soll
|
||||
private final float radius; // Radius des Kreises
|
||||
private final float height; // Höhe der Kamera über dem Zielpunkt
|
||||
private final float speed; // Geschwindigkeit der Bewegung in Radiant pro Sekunde
|
||||
private float angle = 0; // Aktueller Winkel der Kamera in Radiant
|
||||
private final Camera camera;
|
||||
private final Vector3f center; // Fokuspunkt der Kamera
|
||||
private final float radius; // Radius der Kreisbewegung
|
||||
private final float height; // Höhe der Kamera über dem Spielfeld
|
||||
private final float speed; // Geschwindigkeit der Kamerabewegung
|
||||
private float angle; // Aktueller Winkel in der Kreisbewegung
|
||||
|
||||
/**
|
||||
* Erstellt einen neuen CameraController.
|
||||
* Konstruktor für den CameraController.
|
||||
*
|
||||
* @param camera Die Kamera, die gesteuert wird
|
||||
* @param target Der Punkt, auf den die Kamera ausgerichtet wird
|
||||
* @param radius Der Radius des Kreises, auf dem sich die Kamera bewegt
|
||||
* @param height Die Höhe der Kamera über dem Zielpunkt
|
||||
* @param speed Die Geschwindigkeit der Bewegung in Radiant pro Sekunde
|
||||
* @param camera Die Kamera, die gesteuert werden soll
|
||||
* @param center Der Mittelpunkt der Kreisbewegung (Fokuspunkt)
|
||||
* @param radius Der Radius der Kreisbewegung
|
||||
* @param height Die Höhe der Kamera über dem Fokuspunkt
|
||||
* @param speed Die Geschwindigkeit der Kamerabewegung
|
||||
*/
|
||||
public CameraController(Camera camera, Vector3f target, float radius, float height, float speed) {
|
||||
public CameraController(Camera camera, Vector3f center, float radius, float height, float speed) {
|
||||
this.camera = camera;
|
||||
this.target = target;
|
||||
this.center = center;
|
||||
this.radius = radius;
|
||||
this.height = height;
|
||||
this.speed = speed;
|
||||
this.angle = 0; // Starte bei Winkel 0
|
||||
}
|
||||
|
||||
/**
|
||||
* Aktualisiert die Kameraposition basierend auf der verstrichenen Zeit.
|
||||
* Aktualisiert die Kameraposition und -ausrichtung.
|
||||
*
|
||||
* @param tpf Zeit pro Frame
|
||||
*/
|
||||
public void update(float tpf) {
|
||||
angle += speed * tpf; // Winkel basierend auf Geschwindigkeit und Zeit erhöhen
|
||||
if (angle > FastMath.TWO_PI) {
|
||||
angle -= FastMath.TWO_PI; // Zurücksetzen, um Überlauf zu vermeiden
|
||||
// Aktualisiere den Winkel basierend auf der Geschwindigkeit
|
||||
angle += speed * tpf;
|
||||
if (angle >= FastMath.TWO_PI) {
|
||||
angle -= FastMath.TWO_PI; // Winkel zurücksetzen, um Überläufe zu vermeiden
|
||||
}
|
||||
|
||||
// Berechne die neue Kameraposition auf der Kreisbahn
|
||||
float x = FastMath.cos(angle) * radius;
|
||||
float z = FastMath.sin(angle) * radius;
|
||||
// Berechne die neue Position der Kamera
|
||||
float x = center.x + radius * FastMath.cos(angle);
|
||||
float z = center.z + radius * FastMath.sin(angle);
|
||||
float y = center.y + height;
|
||||
|
||||
// Setze die neue Position der Kamera
|
||||
camera.setLocation(new Vector3f(x, height, z));
|
||||
camera.lookAt(target, Vector3f.UNIT_Y); // Kamera bleibt auf das Ziel fokussiert
|
||||
// Setze die Kameraposition
|
||||
camera.setLocation(new Vector3f(x, y, z));
|
||||
|
||||
// Lasse die Kamera auf den Fokuspunkt blicken
|
||||
camera.lookAt(center, Vector3f.UNIT_Y);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
package pp.monopoly.client.gui;
|
||||
|
||||
import com.jme3.font.BitmapFont;
|
||||
import com.jme3.font.BitmapText;
|
||||
import com.jme3.material.Material;
|
||||
import com.jme3.math.ColorRGBA;
|
||||
import com.jme3.math.Vector3f;
|
||||
import com.jme3.scene.Geometry;
|
||||
import com.jme3.scene.shape.Box;
|
||||
@ -9,8 +12,8 @@ import com.jme3.texture.Texture;
|
||||
import pp.monopoly.client.MonopolyApp;
|
||||
|
||||
/**
|
||||
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat.
|
||||
* Die Kamera wird durch den CameraController gesteuert.
|
||||
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat und einem kleinen Würfel.
|
||||
* Die Kamera wird durch den CameraController gesteuert, und die Koordinaten des Würfels werden angezeigt.
|
||||
*/
|
||||
public class TestWorld {
|
||||
|
||||
@ -34,18 +37,16 @@ public class TestWorld {
|
||||
app.getRootNode().detachAllChildren(); // Entferne andere Szenenobjekte
|
||||
|
||||
createBoard(); // Erstelle das Spielfeld
|
||||
createCube(); // Füge den Würfel hinzu
|
||||
|
||||
// Erstelle den CameraController
|
||||
// Übergib die Kamerasteuerung an CameraController
|
||||
cameraController = new CameraController(
|
||||
app.getCamera(), // Die Kamera der App
|
||||
Vector3f.ZERO, // Fokus auf die Mitte des Spielfelds
|
||||
5, // Radius des Kreises
|
||||
3, // Höhe der Kamera
|
||||
0.5f // Geschwindigkeit der Bewegung
|
||||
app.getCamera(), // Die Kamera der App
|
||||
Vector3f.ZERO, // Fokus auf die Mitte des Spielfelds
|
||||
5, // Radius des Kreises
|
||||
3, // Höhe der Kamera
|
||||
0.5f // Geschwindigkeit der Bewegung
|
||||
);
|
||||
|
||||
// Deaktiviere den Maus-Cursor
|
||||
app.enqueue(() -> app.getInputManager().setCursorVisible(false));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,7 +66,7 @@ public class TestWorld {
|
||||
private void createBoard() {
|
||||
// Erstelle ein Quadrat
|
||||
Box box = new Box(1, 0.01f, 1); // Dünnes Quadrat für die Textur
|
||||
Geometry geom = new Geometry("Box", box);
|
||||
Geometry geom = new Geometry("Board", box);
|
||||
|
||||
// Setze das Material mit Textur
|
||||
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
||||
@ -75,4 +76,56 @@ public class TestWorld {
|
||||
|
||||
app.getRootNode().attachChild(geom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Füge einen kleinen blauen 3D-Würfel hinzu und zeige seine Koordinaten an.
|
||||
*/
|
||||
private void createCube() {
|
||||
// Erstelle einen kleinen 3D-Würfel
|
||||
Box cube = new Box(0.1f, 0.1f, 0.1f); // Sehr kleine Kantenlänge
|
||||
Geometry cubeGeom = new Geometry("PlayerPiece", cube);
|
||||
|
||||
// Erstelle ein Material mit einer blauen Farbe
|
||||
Material cubeMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
||||
cubeMat.setColor("Color", ColorRGBA.Blue); // Blaue Farbe
|
||||
cubeGeom.setMaterial(cubeMat);
|
||||
|
||||
// Positioniere den Würfel
|
||||
float boardWidth = 1; // Breite des Bretts (aus `createBoard`)
|
||||
float boardDepth = 1; // Tiefe des Bretts (aus `createBoard`)
|
||||
Vector3f cubePosition = new Vector3f(
|
||||
boardWidth + 0.3f, // Verschiebe den Würfel nach rechts
|
||||
0.1f, // Höhe knapp über dem Brett
|
||||
boardDepth - 0.3f // Position in Richtung der unteren rechten Ecke
|
||||
);
|
||||
cubeGeom.setLocalTranslation(cubePosition);
|
||||
|
||||
// Füge den Würfel zur Szene hinzu
|
||||
app.getRootNode().attachChild(cubeGeom);
|
||||
|
||||
// Zeige die Koordinaten des Würfels an
|
||||
displayCubeCoordinates(cubePosition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Zeige die Koordinaten des Würfels im GUI an.
|
||||
*
|
||||
* @param position Die Position des Würfels
|
||||
*/
|
||||
private void displayCubeCoordinates(Vector3f position) {
|
||||
// Lade die Schriftart
|
||||
BitmapFont font = app.getAssetManager().loadFont("Interface/Fonts/Default.fnt");
|
||||
BitmapText coordinatesText = new BitmapText(font);
|
||||
|
||||
// Setze den Text mit den Koordinaten
|
||||
coordinatesText.setText(String.format("Würfel Koordinaten: X=%.2f, Y=%.2f, Z=%.2f",
|
||||
position.x, position.y, position.z));
|
||||
|
||||
// Positioniere den Text auf dem Bildschirm
|
||||
coordinatesText.setLocalTranslation(10, app.getCamera().getHeight() - 10, 0); // X, Y (oben links)
|
||||
coordinatesText.setSize(font.getCharSet().getRenderedSize() * 1.5f); // Schriftgröße
|
||||
|
||||
// Füge den Text zum GUI-Node hinzu
|
||||
app.getGuiNode().attachChild(coordinatesText);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user