Heyho,
ist heute mein zweites Thema hier im Forum , hoffe das ist erlaubt da es sich um 2 stark abweichende Themen handelt:
Hier erstmal der Code (einmal der ganzen Game Klasse und darunter dann nocheinmal nur der GameLoop Methode)
Hier der Gameloop:
Ich bin derzeitig am rätseln wieso er Freezt - da es prinzipiell schlagartig langsamer wird -> vorher läuft es mit ca. 20-25 Frames per second -> aufeinmal läufts dann aber mit 2-3 Frames und der Canvas lässt sich nicht mehr anklicken - sprich auch keine Aktionen werden ausgeführt mit der Maus, das ganze lässt sich aber merkwürdiger Weise mit dem ESC Button schließen (ist im KeyListener)
Hoffe ihr könnt mir mit Rat beistehen!
Mit freundlichen Grüßen Lacritz
ist heute mein zweites Thema hier im Forum , hoffe das ist erlaubt da es sich um 2 stark abweichende Themen handelt:
Hier erstmal der Code (einmal der ganzen Game Klasse und darunter dann nocheinmal nur der GameLoop Methode)
Code:
package team14;
import javafx.event.EventHandler;
import javafx.fxml.Initializable;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Game implements Initializable {
private ExecutorService executor = Executors.newSingleThreadExecutor();
private Canvas canvas;
private Map map;
private int width;
private int height;
private boolean running;
private int mouseX;
private int mouseY;
private int characterX = 0;
private int characterY = 0;
/*
Getter implemented
*/
public int getCharacterX() {
return characterX;
}
public int getCharacterY() {
return characterY;
}
public Game(GraphicsContext graphicsContext, Map map) {
this.map = map;
canvas = graphicsContext.getCanvas();
width = (int) canvas.getWidth();
height = (int) canvas.getHeight();
canvas.setFocusTraversable(true);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
void startGameLoop() {
executor.execute(() -> {
long before = System.currentTimeMillis(), now, sleep;
running = true;
//noinspection InfiniteLoopStatement
int i = 0;
while (running == true) {
/*
Components which gonna be Looped
*/
Controll();
paint();
// System.out.println(i);
i++;
/*
End of drawing and Controlling -> next FPS
*/
now = System.currentTimeMillis();
sleep = Math.max(0, 40 - (now - before)); // 25 fps
try {
Thread.sleep(sleep);
} catch (InterruptedException ignored) {
}
before = System.currentTimeMillis();
}
});
}
public void paint() {
map.Render();
}
/*
Getting the Controll of our Game
*/
public void Controll() {
/*
Getting X and Y Coordinate of our mouse
*/
canvas.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
mouseX = (int) event.getX();
mouseY = (int) event.getY();
map.MiningBlock(mouseX, mouseY);
}
});
/*
Getting our Key's Pressed
WASD implemented as CharacterControl
*/
canvas.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getCode().equals(KeyCode.W)) {
characterY = characterY - 10;
} else if (event.getCode().equals(KeyCode.A)) {
characterX = characterX - 10;
} else if (event.getCode().equals(KeyCode.S)) {
characterY = characterY + 10;
} else if (event.getCode().equals(KeyCode.D)) {
characterY = characterX + 10;
}
if (event.getCode().equals(KeyCode.ESCAPE)) {
System.exit(0);
}
}
}
);
}
}
Hier der Gameloop:
Code:
void startGameLoop() {
executor.execute(() -> {
long before = System.currentTimeMillis(), now, sleep;
running = true;
//noinspection InfiniteLoopStatement
int i = 0;
while (running == true) {
/*
Components which gonna be Looped
*/
Controll();
paint();
// System.out.println(i);
i++;
/*
End of drawing and Controlling -> next FPS
*/
now = System.currentTimeMillis();
sleep = Math.max(0, 40 - (now - before)); // 25 fps
try {
Thread.sleep(sleep);
} catch (InterruptedException ignored) {
}
before = System.currentTimeMillis();
}
});
}
Ich bin derzeitig am rätseln wieso er Freezt - da es prinzipiell schlagartig langsamer wird -> vorher läuft es mit ca. 20-25 Frames per second -> aufeinmal läufts dann aber mit 2-3 Frames und der Canvas lässt sich nicht mehr anklicken - sprich auch keine Aktionen werden ausgeführt mit der Maus, das ganze lässt sich aber merkwürdiger Weise mit dem ESC Button schließen (ist im KeyListener)
Hoffe ihr könnt mir mit Rat beistehen!
Mit freundlichen Grüßen Lacritz
Zuletzt bearbeitet: