Hey Leute versuche mich gerade dabei Tetris zu programmieren nur bei der Spielschleife komm ich nicht ganz weiter, da der Gamespeed ja je nachdem wie viele Punkte man hat sich verändert, auch ein Problem ist, dass manchmal die Tastendrücke dann nicht erkannt werden, und dass es sich einfach nicht flüssig anfühlt. Habt ihr ne Idee wie man das lösen könnte, sodass ich ne Game Loop habe, bei der sich alles flüssig anfühlt, kein Tastendruck verloren geht, die Blöcke gewohnt langsam fallen, man es aber trotzdem schneller machen kann.
Im Moment schaut es so aus :
Im Moment schaut es so aus :
Java:
public void run() {
long lastTime = System.nanoTime();
long timer = System.currentTimeMillis();
final double ns = 1000000000.0 / ups;
double delta = 0;
int frames = 0;
int updates = 0;
requestFocus();
while(running){
long now = System.nanoTime();
delta += (now-lastTime) / ns;
lastTime = now;
while (delta >= 1){
update();
updates++;
delta--;
}
render();
frames++;
if (System.currentTimeMillis() - timer > 1000){
timer += 1000;
frame.setTitle( " | " + updates + " ups, " + frames + " fps");
updates = 0;
frames = 0;
}
}
stop();
}
public void update(){
logik.update(tastatur);
}
public void render(){
BufferStrategy bs = getBufferStrategy();
if (bs == null){
createBufferStrategy(2);
return;
}
bildschirm.render(logik);
for(int i = 0; i < pixel.length; i++){
pixel[i] = bildschirm.pixel[i];
}
Graphics g = bs.getDrawGraphics();
g.drawImage(image, 0, 0, getWidth(), getHeight(),null);
g.dispose();
bs.show();
}
//Die Logik klasse, in der das Ganze spiel halt eigentlich läuft
public void update(Tastatur tastatur){
counter ++;
if(counter % (20-game_speed) == 0){
tastatur.update();
if(!block_aktiv)erstelle_block();
for(int i = 0; i < Spielfeld.length; i++) Spielfeld[i] = 0;
update_block();
if(tastatur.right == true && rechts_frei()){
xPos++;
}
if(tastatur.left == true && links_frei()){
xPos--;
}
if(tastatur.up == true ){
form++;
drehe_block();
}
//geht noch weiter, aber hat eig nichts mehr mit der Game Loop zu tun