Why doesn't my screen turn red?

后端 未结 1 734
逝去的感伤
逝去的感伤 2020-12-22 02:52

Ok, so I\'m new to programming and I\'m following a tutorial on Youtube to build my own game. My problem is that my screen doesn\'t turn red, it just stays gray. I\'m sure I

相关标签:
1条回答
  • 2020-12-22 03:37

    You never actually provide the Thread with something to run...

    public synchronized void start() {
        running = true;
        // Not the reference to this...
        thread = new Thread(this, "Display");
        thread.start();
    
    }
    

    By passing this (which is an instance of your Game class which implements Runnable), the Thread will be able to call your run method

    nb:

    The size of your viewable area should be defined by the component, not the frame. This can be achieved by overriding the getPreferredSize method and returning the preferred viewable size you want the component to be. Otherwise, the viewable area will be the size of the frame minus it's decoration insets, which may not meet your expectations.

    In your "game-loop" you should consider having a small delay between cycles to give time for the system to actually update the screen, this takes some of the pressure of the Thread

    Runnable example

    Buffer

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.image.BufferStrategy;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JFrame;
    
    public class Game extends Canvas implements Runnable {
    
        private static final long serialVersionUID = 1L;
    
        public static int width = 300;
        public static int height = width / 16 * 9;
        public static int scale = 3;
    
        private Thread thread;
        private JFrame frame;
        private boolean running = false;
    
        public Game() {
            Dimension size = new Dimension(width * scale, height * scale);
            setPreferredSize(size);
    
            frame = new JFrame();
        }
    
        public synchronized void start() {
            running = true;
            thread = new Thread(this, "Display");
            thread.start();
    
        }
    
        public synchronized void stop() {
            running = false;
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        public void run() {
            while (running) {
                update();
                render();
    //          try {
    //              Thread.sleep(40);
    //          } catch (InterruptedException ex) {
    //          }
            }
    
        }
    
        public void update() {
    
        }
    
        public void render() {
            BufferStrategy bs = getBufferStrategy();
            if (bs == null) {
                createBufferStrategy(3);
                return;
            }
    
            Graphics g = bs.getDrawGraphics();
            g.setColor(Color.RED);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.dispose();
            bs.show();
        }
    
        public static void main(String[] args) {
            Game game = new Game();
            game.frame.setResizable(false);
            game.frame.setTitle("JJF");
            game.frame.add(game);
            game.frame.pack();
            game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            game.frame.setLocationRelativeTo(null);
            game.frame.setVisible(true);
    
            game.start();
    
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题