Hey,
Ich arbeite seit ein paar Tagen an einem Java 16 Spiel.
Bei der GameLoop, die ich von einem YouTuber habe, komme ich bei der Render Methode nicht weiter, da ich nicht so richtig verstehe wie ich diese füllen muss. Die Update Methode und die GameLoop an sich verstehe ich aber.
Ich habe mal die Gui Klasse, das Label mit dem ich zeichne und die GameLoop angehangen.
[CODE lang="java" title="Gui Klasse"]package Graphic;
import javax.swing.JFrame;
public class Gui {
public Gui() {
Main.Variables.jf1 = new JFrame();
Main.Variables.jf1.setSize(Main.Variables.screenwidth, Main.Variables.screenhight);
Main.Variables.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Main.Variables.jf1.setLocationRelativeTo(null);
Main.Variables.jf1.setLayout(null);
Main.Variables.jf1.setTitle("Asteroids");
Main.Variables.jf1.setResizable(false);
Main.Variables.jf1.requestFocus();
Main.Variables.jf1.addKeyListener(new InputHandler.KeyHandler());
Main.Variables.jf1.addMouseListener(new InputHandler.MouseHandler());
Main.Variables.jf1.addMouseMotionListener(new InputHandler.MouseHandler());
Main.Variables.jf1.addMouseWheelListener(new InputHandler.MouseHandler());
Main.Variables.jf1.setVisible(true);
Main.Variables.lb1 = new Label();
Main.Variables.lb1.setBounds(0, 0, Main.Variables.screenwidth, Main.Variables.screenhight);
Main.Variables.lb1.setVisible(true);
Main.Variables.jf1.add(Main.Variables.lb1);
}
}[/CODE]
[CODE lang="java" title="Label Klasse:"]
package Graphic;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import javax.swing.JLabel;
public class Label extends JLabel {
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// Cursor
setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Main.Variables.c, new Point(0, 0), "Cursor"));
// Background
g.drawImage(Main.Variables.b1, Main.Variables.backgroundX1, Main.Variables.backgroundY, 1200, 800, null);
g.drawImage(Main.Variables.b2, Main.Variables.backgroundX2, Main.Variables.backgroundY, 1200, 800, null);
// AsteroidBackground
for (int i = 0; i < 5; i++) {
g.drawImage(Main.Variables.ab, Main.Variables.AsteroidBackgroundX, Main.Variables.AsteroidBackgroundY,
100, 100, null);
}
// Player
g.drawImage(Actors.Player.rotate(), Main.Variables.pX, Main.Variables.pY, null);
// Asteroids
for (int i = 0; i < 5; i++) {
g.drawImage(Main.Variables.a, Main.Variables.AsteroidX, Main.Variables.AsteroidY, 100, 100, null);
}
//Collision
if(Main.Variables.CollisionAsteroid == true) {
g.setColor(new Color(230, 0, 0, 30));
g.fillRect(0, 0, Main.Variables.screenwidth, Main.Variables.screenhight);
Main.Variables.CollisionAsteroid = false;
}
// Display
g.setFont(new Font("Arial", Font.BOLD, 20));
Color rainbow = new Color(Effects.Rainbow.r, Effects.Rainbow.g, Effects.Rainbow.b);
g.setColor(rainbow);
g.drawString("Pos X : " + Main.Variables.pX, 10, 720);
g.drawString("Pos Y : " + Main.Variables.pY, 10, 750);
g.setFont(new Font("Arial", Font.BOLD, 35));
g.drawString("Health : " + Main.Variables.PlayerHealth, 10, 40);
repaint();
}
}[/CODE]
[CODE lang="java" title="GameLoop"]package Main;
public class GameLoop implements Runnable {
private boolean running = true;
@Override
public void run() {
long lastTime = System.nanoTime();
final double FPS = 60.0;
double ns = 1000000000 / FPS;
double deltaTime = 0;
long timer = System.currentTimeMillis();
while (running) {
long currentTime = System.nanoTime();
deltaTime += (currentTime - lastTime) / ns;
lastTime = currentTime;
if (deltaTime >= 1) {
update();
deltaTime--;
render();
}
if(System.currentTimeMillis() - timer > 1000) {
timer += 1000;
}
}
}
private void render() {
}
private void update() {
Actors.Player.MovePlayer();
Actors.Asteroids.MoveAsteroids();
Actors.Collision.AsteroidCollision();
Effects.AsteroidsBackground.MoveAsteroidsBackground();
Effects.Background.MoveBackground();
}
}
[/CODE]
Ich arbeite seit ein paar Tagen an einem Java 16 Spiel.
Bei der GameLoop, die ich von einem YouTuber habe, komme ich bei der Render Methode nicht weiter, da ich nicht so richtig verstehe wie ich diese füllen muss. Die Update Methode und die GameLoop an sich verstehe ich aber.
Ich habe mal die Gui Klasse, das Label mit dem ich zeichne und die GameLoop angehangen.
[CODE lang="java" title="Gui Klasse"]package Graphic;
import javax.swing.JFrame;
public class Gui {
public Gui() {
Main.Variables.jf1 = new JFrame();
Main.Variables.jf1.setSize(Main.Variables.screenwidth, Main.Variables.screenhight);
Main.Variables.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Main.Variables.jf1.setLocationRelativeTo(null);
Main.Variables.jf1.setLayout(null);
Main.Variables.jf1.setTitle("Asteroids");
Main.Variables.jf1.setResizable(false);
Main.Variables.jf1.requestFocus();
Main.Variables.jf1.addKeyListener(new InputHandler.KeyHandler());
Main.Variables.jf1.addMouseListener(new InputHandler.MouseHandler());
Main.Variables.jf1.addMouseMotionListener(new InputHandler.MouseHandler());
Main.Variables.jf1.addMouseWheelListener(new InputHandler.MouseHandler());
Main.Variables.jf1.setVisible(true);
Main.Variables.lb1 = new Label();
Main.Variables.lb1.setBounds(0, 0, Main.Variables.screenwidth, Main.Variables.screenhight);
Main.Variables.lb1.setVisible(true);
Main.Variables.jf1.add(Main.Variables.lb1);
}
}[/CODE]
[CODE lang="java" title="Label Klasse:"]
package Graphic;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import javax.swing.JLabel;
public class Label extends JLabel {
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// Cursor
setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Main.Variables.c, new Point(0, 0), "Cursor"));
// Background
g.drawImage(Main.Variables.b1, Main.Variables.backgroundX1, Main.Variables.backgroundY, 1200, 800, null);
g.drawImage(Main.Variables.b2, Main.Variables.backgroundX2, Main.Variables.backgroundY, 1200, 800, null);
// AsteroidBackground
for (int i = 0; i < 5; i++) {
g.drawImage(Main.Variables.ab, Main.Variables.AsteroidBackgroundX, Main.Variables.AsteroidBackgroundY,
100, 100, null);
}
// Player
g.drawImage(Actors.Player.rotate(), Main.Variables.pX, Main.Variables.pY, null);
// Asteroids
for (int i = 0; i < 5; i++) {
g.drawImage(Main.Variables.a, Main.Variables.AsteroidX, Main.Variables.AsteroidY, 100, 100, null);
}
//Collision
if(Main.Variables.CollisionAsteroid == true) {
g.setColor(new Color(230, 0, 0, 30));
g.fillRect(0, 0, Main.Variables.screenwidth, Main.Variables.screenhight);
Main.Variables.CollisionAsteroid = false;
}
// Display
g.setFont(new Font("Arial", Font.BOLD, 20));
Color rainbow = new Color(Effects.Rainbow.r, Effects.Rainbow.g, Effects.Rainbow.b);
g.setColor(rainbow);
g.drawString("Pos X : " + Main.Variables.pX, 10, 720);
g.drawString("Pos Y : " + Main.Variables.pY, 10, 750);
g.setFont(new Font("Arial", Font.BOLD, 35));
g.drawString("Health : " + Main.Variables.PlayerHealth, 10, 40);
repaint();
}
}[/CODE]
[CODE lang="java" title="GameLoop"]package Main;
public class GameLoop implements Runnable {
private boolean running = true;
@Override
public void run() {
long lastTime = System.nanoTime();
final double FPS = 60.0;
double ns = 1000000000 / FPS;
double deltaTime = 0;
long timer = System.currentTimeMillis();
while (running) {
long currentTime = System.nanoTime();
deltaTime += (currentTime - lastTime) / ns;
lastTime = currentTime;
if (deltaTime >= 1) {
update();
deltaTime--;
render();
}
if(System.currentTimeMillis() - timer > 1000) {
timer += 1000;
}
}
}
private void render() {
}
private void update() {
Actors.Player.MovePlayer();
Actors.Asteroids.MoveAsteroids();
Actors.Collision.AsteroidCollision();
Effects.AsteroidsBackground.MoveAsteroidsBackground();
Effects.Background.MoveBackground();
}
}
[/CODE]