Guten Abend allerseits,
Nach warscheinlich 100en von Stunden, die ich investiert habe um endlich mal flüssig und sauber zu rendern, habe ich immer noch keinen Erfolg.
Nun habe ich mir mal das kleinste Beispiel zusammengeschrieben, das ich mir vorstellen konnte und habe dies mal getestet.
Ich habe immer wieder das Problem dass ich zeitweise (immer in so 5-10 Sekunden Abständen) kleine Ruckler im Bild habe, die ich ums verrecken nicht rausbekomme.
Ich poste hier mal den Code und hoffe dass mir jemand sagen kann wieso ich diese kleinen Ruckler habe, oder ob es bei euch flüssig läuft, also wirklich flüssig.
Ich werde unten außerdem noch die .jar dazu anhängen, damit ihr es euch anschauen könnt wenn ihr willt.
mfg Major_Sa
Nach warscheinlich 100en von Stunden, die ich investiert habe um endlich mal flüssig und sauber zu rendern, habe ich immer noch keinen Erfolg.
Nun habe ich mir mal das kleinste Beispiel zusammengeschrieben, das ich mir vorstellen konnte und habe dies mal getestet.
Ich habe immer wieder das Problem dass ich zeitweise (immer in so 5-10 Sekunden Abständen) kleine Ruckler im Bild habe, die ich ums verrecken nicht rausbekomme.
Ich poste hier mal den Code und hoffe dass mir jemand sagen kann wieso ich diese kleinen Ruckler habe, oder ob es bei euch flüssig läuft, also wirklich flüssig.
Ich werde unten außerdem noch die .jar dazu anhängen, damit ihr es euch anschauen könnt wenn ihr willt.
Java:
package Main;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Main extends JPanel implements Runnable {
private boolean running;
private BufferedImage screen = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
private Graphics2D g = (Graphics2D)screen.getGraphics();
public void start(){
running = true;
new Thread(this).start();
}
public void stop(){
running = false;
}
@Override
public void run() {
long lastTime = System.nanoTime();
double unprocessed = 0.0D;
double nsPerTick = 1000000000 / 60;
long lastTimer = System.currentTimeMillis();
int ticks = 0;
int frames = 0;
while(running){
long now = System.nanoTime();
unprocessed += (now - lastTime) / nsPerTick;
lastTime = now;
boolean shouldRender = false;
while(unprocessed >= 1.0D){
ticks++;
tick();
unprocessed -= 1;
shouldRender = true;
}
if(shouldRender){
frames++;
render();
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(System.currentTimeMillis() - lastTimer > 1000L){
lastTimer += 1000;
System.out.println(frames + " | " + ticks);
frames = 0;
ticks = 0;
}
}
}
//Rendering stuff
private int xDir = 1;
private int yDir = 1;
private int xDraw = 0;
private int yDraw = 0;
public void tick(){
if(xDraw >= 700){
xDir = -1;
}
if(xDraw <= 0){
xDir = 1;
}
if(yDraw >= 500){
yDir = -1;
}
if(yDraw <= 00){
yDir = 1;
}
xDraw += xDir;
yDraw += yDir;
}
public void render(){
g.setColor(Color.BLACK);
g.fillRect(0, 0, 800, 600);
g.setColor(Color.ORANGE);
System.out.println("Drawing at : " + xDraw + " | " + yDraw);
g.fillRect(xDraw, yDraw, 50, 50);
getGraphics().drawImage(screen, 0, 0, null);
}
//MAIN METHODS...
public static void main(String[] args) {
new Main();
}
public Main(){
setBounds(0, 0, 800, 600);
JFrame frame = new JFrame("Render Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLayout(null);
frame.setSize(800, 600);
frame.add(this);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
start();
}
}
mfg Major_Sa