Hello, im trying to create a simple 2d game but have run into huge problems when i try to draw the graphics. Every fifth second or so my monitor is flickering badly wich is very annyoing. Here is the source, any help is very appriciated:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import javax.swing.*;
public class Game extends JFrame implements Runnable {
final int SCREEN_WIDTH = 320;
final int SCREEN_HEIGHT = 240;
final int BIT_DEPTH = 16;
final int REFRESH_RATE = 60;
final int FPS = 60;
float y,x,dx,dy;
Image img1;
//private InputManager inputManager = new InputManager();
public static void main(String[] args){
new Game().init(false);
}
void init(boolean fullscreen){
setTitle("test");
GraphicsConfiguration gc = getGraphicsConfiguration();
GraphicsDevice gd = gc.getDevice();
if(fullscreen) {
setUndecorated(true);
gd.setFullScreenWindow(this);
gd.setDisplayMode(new DisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,BIT_DEPTH, REFRESH_RATE));
}
else {
setBounds(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
setVisible(true);
}
//remove cursor
Image cursorImage = Toolkit.getDefaultToolkit().getImage("sprites/transparent.gif");
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImage, new Point( 0, 0), "" );
setCursor( blankCursor );
//
setResizable(false);
setIgnoreRepaint(true);
//addKeyListener(inputManager);
img1 = loadImage("test.png");
x = 40; y = 50; dx = 1;
Thread t = new Thread(this);
t.start();
}
public Image loadImage(String filename){
return new ImageIcon("images/"+filename).getImage();
}
public void run(){
final int NANO_FRAME_LENGTH = 1000000000/FPS;
long startTime = System.nanoTime();
int frameCount = 0;
while(true) {
BufferStrategy bs = getBufferStrategy();
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
if(x < 0 || x > 320)dx = -dx;
x += dx;
//misc rendering
g.setColor(Color.BLUE);
g.fillRect(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
g.drawImage(img1,Math.round(x),Math.round(y),null);
bs.show();
frameCount++;
// note:System.nanoTime in 1.5+
while((System.nanoTime()-startTime)/NANO_FRAME_LENGTH <frameCount) {
Thread.yield();
}
}
}
}