Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.util.*;
- import java.awt.image.*;
- import javax.swing.JFrame;
- public class TestLoop extends Canvas implements Runnable{
- private static final int WIDTH = 800;
- private static final int HEIGHT = 600;
- private boolean running = false;
- private int tick;
- private int frames;
- private int tickCount;
- private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
- private int[] pixel = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
- public void start(){
- if(!running){
- running = true;
- new Thread(this).start();
- }
- }
- public void stop(){
- if(running)running = false;
- }
- public void run(){
- long lastTime = 0;
- double updateInterval = 1000000000.0 / 60.0;
- long nextUpdateTick = System.nanoTime();
- long now = 0;
- long start = 0;
- long timer = System.currentTimeMillis();
- long fps = 60;
- while(running){
- long deltaTime = System.nanoTime() - lastTime;
- lastTime += deltaTime;
- start = System.nanoTime();
- for(now = System.nanoTime(); now > nextUpdateTick; nextUpdateTick += updateInterval){
- tick++;
- update();
- }
- render();
- Toolkit.getDefaultToolkit().sync();
- long sleepTime = Math.round((1e9/fps - (System.nanoTime() - lastTime)) /1e6);
- if(sleepTime < 0)continue;
- long prev = System.nanoTime(), diff;
- while((diff = System.nanoTime() - prev) < sleepTime){
- if(diff < sleepTime * 0.8){
- try{
- Thread.sleep(1);
- } catch(Exception e){
- e.printStackTrace();
- }
- } else {
- Thread.yield();
- }
- }
- if(System.currentTimeMillis() - timer > 1000){
- System.out.println("FPS: " + frames + " Ticks: " + tick);
- frames = 0;
- tick = 0;
- timer += 1000;
- }
- }
- }
- public void update(){
- tickCount++;
- }
- public void render(){
- frames++;
- BufferStrategy bs = getBufferStrategy();
- if(bs == null){
- createBufferStrategy(3);
- return;
- }
- for(int i = 0; i < pixel.length; i++){
- pixel[i] = (i + tickCount);
- }
- Graphics g = bs.getDrawGraphics();
- g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
- g.dispose();
- bs.show();
- }
- public static void main(String[] args){
- TestLoop game = new TestLoop();
- game.setPreferredSize(new Dimension(WIDTH, HEIGHT));
- game.setMaximumSize(new Dimension(WIDTH, HEIGHT));
- game.setMinimumSize(new Dimension(WIDTH, HEIGHT));
- JFrame frame = new JFrame();
- frame.add(game);
- frame.pack();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setResizable(false);
- frame.setLocationRelativeTo(null);
- frame.setVisible(true);
- game.start();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement