import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsEnvironment; import java.awt.GraphicsDevice; import java.awt.GraphicsConfiguration; import java.awt.Color; import java.awt.Toolkit; import java.awt.DisplayMode; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.awt.image.BufferStrategy; import java.awt.geom.AffineTransform; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.imageio.ImageIO; import java.io.File; import java.util.Random; public class ScreenTest { private static ScreenTest st; private Graphics2D g2dbf; // private Graphics g; private BufferedImage bgImage; //JFrame size private int frameWidth,frameHeight; //Identity transform private AffineTransform identityTrans; //Object transform private AffineTransform objTrans; // JFrame frame; //platform's graphics attributes... GraphicsEnvironment ge; GraphicsDevice gd; GraphicsConfiguration gc; public double posX, posY; public double posY2,velY2; private double velX, velY; public double recentPosY; int fps; private BufferedImage myImg; Random rand = new Random(); ScreenTest() { // Get platform's graphics attributes... ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); gd = ge.getDefaultScreenDevice(); gc = gd.getDefaultConfiguration(); //JFrame properties frame = new JFrame(gc); frame.setTitle("Screen Test"); frame.setIgnoreRepaint(true); frame.setResizable(false); frame.setUndecorated(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Set transform to identity transform identityTrans = new AffineTransform(); //object transform objTrans = new AffineTransform(); //Windowed Mode frameWidth = 640; frameHeight = 480; frame.setUndecorated(false); try { myImg = ImageIO.read(new File("img.png")); } catch(IOException e){ System.err.println(e); } posX = frameWidth/2; posY = frameHeight/2; posY2 = posY; velX = 0; velY = -4; velY2 = -6; recentPosY = posY; frame.setSize(frameWidth,frameHeight); frame.setVisible(true); //back buffer image bgImage = gc.createCompatibleImage(frameWidth,frameHeight); } void update_Game() { updateImg(); } void drawGraphics() { try { g2dbf = bgImage.createGraphics(); //set background g2dbf.setColor(Color.BLACK); g2dbf.fillRect(0,0,frameWidth,frameHeight); g2dbf.setColor(Color.WHITE); g2dbf.fillRect((int)posX,(int)posY,50,50); g2dbf.fillOval((int)posX + 80,(int)posY2,50,50); //print some status information g2dbf.setColor(Color.WHITE); g2dbf.drawString("Image: " + Math.round(posX) + "," + Math.round(posY) , 5, 40); g2dbf.drawString( String.format( "FPS: %s", fps ), 5, 60 ); g = frame.getGraphics(); g.drawImage(bgImage,0,0,null); Toolkit.getDefaultToolkit().sync(); } finally { if(g != null) g.dispose(); if(g2dbf != null) g2dbf.dispose(); } } void updateImg() { posX += velX; posY += velY; posY2 += velY2; if (posX < -70) posX = frameWidth + 10; else if (posX > frameWidth + 10) posX = -10; if (posY < -10) posY = frameHeight + 10; else if (posY > frameHeight + 10) posY = -10; if (posY2 < -10) posY2 = frameHeight + 10; else if (posY2 > frameHeight + 10) posY2 = -10; } public static void main(String[]args) throws InterruptedException,InvocationTargetException { //System.setProperty("sun.java2d.opengl", "True"); //System.setProperty("sun.java2d.d3d", "True"); System.setProperty("sun.java2d.d3d", "false"); //System.setProperty("sun.java2d.trace","count"); SwingUtilities.invokeAndWait(new Runnable(){ @Override public void run() { st = new ScreenTest(); } }); long next_game_tick = System.nanoTime(); final int TICKS_PER_SECOND = 50; final int SKIP_TICKS = 1_000_000_000/TICKS_PER_SECOND; final int MAX_FRAME_SKIPS = 10; int loops; while(true) { loops = 0; while(System.nanoTime() > next_game_tick && loops < MAX_FRAME_SKIPS) { st.update_Game(); st.drawGraphics(); next_game_tick += SKIP_TICKS; loops++; } // Yield some cpu time... Thread.yield(); } } }