2015-10-25 53 views
1

我一直试图在线上遵循一个简单的教程(https://www.youtube.com/watch?v=1gir2R7G9ws)。当我尝试输入他输入的代码时,我得不到相同的结果。我输入的某些内容最终会成为无法使用的错误。当我尝试使用GetBufferStrategy时,会发生这种情况。我不太清楚我的代码有什么问题。我真的可以用一些帮助。如何更改窗口的颜色(缓冲区策略问题)

下面是我得到了什么:

package components; 

    import java.awt.*; 
    import java.awt.image.BufferStrategy; 
    import java.awt.Color; 
    import java.awt.FlowLayout; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.LayoutManager; 
    import java.awt.event.KeyEvent; 
    import java.awt.event.KeyListener; 


    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 


    import java.awt.event.*; 
    import javax.swing.*; 

    /* FrameDemo.java requires no other files. */ 
    public class Window { 
     /** 
     * Create the GUI and show it. For thread safety, 
     * this method should be invoked from the 
     * event-dispatching thread. 
     */ 

     private Thread thread; 
     private boolean running = false; 



     public synchronized void start(){ 

      thread = new Thread(); 
      thread.start(); 
      running = true; 

     } 

     public synchronized void stop(){ 

      try{ 
       thread.join(); 
       running=false; 
      }catch(Exception e) { 
       e.printStackTrace(); 
      } 

     } 

     public void run(){ 


       long lastTime = System.nanoTime(); 
       double amountOfTicks = 60.0; 
       double ns = 1000000000/amountOfTicks; 
       double delta = 0; 
       long timer = System.currentTimeMillis(); 
       int frames = 0; 
       while(running) 
       { 
          long now = System.nanoTime(); 
          delta += (now - lastTime)/ns; 
          lastTime = now; 
          while(delta >=1) 
            { 
             tick(); 
             delta--; 
            } 
            if(running) 
             render(); 
            frames++; 

            if(System.currentTimeMillis() - timer > 1000) 
            { 
             timer += 1000; 
             System.out.println("FPS: "+ frames); 
             frames = 0; 
            } 
       } 
         stop(); 


     } 

     private void tick(){ 

     } 

     private void render() { 
      BufferStrategy bs = this.getBufferStrategy(); 

      if (bs==null){ 
       this.createBufferStrategy(3); 
       return;   
      } 

      Graphics g = bs.getDrawGraphics(); 

      g.setColor(Color.black); 
      g.fillRect(0,0,873,374); 

      g.dispose(); 
      bs.show(); 
     } 

     private void createBufferStrategy(int i) { 


     } 

     private BufferStrategy getBufferStrategy() { 

     return null; 
     } 

     private static void createAndShowGUI() { 
      //Create and set up the window. 
      JFrame frame = new JFrame("Mr. Krebs"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      JLabel emptyLabel = new JLabel(""); 
      emptyLabel.setPreferredSize(new Dimension(1000, 700)); 
      frame.getContentPane().add(emptyLabel, BorderLayout.CENTER); 

      //Display the window. 
      frame.pack(); 
      frame.setVisible(true); 
      frame.setLocationRelativeTo(null); 
     } 

     public static void main(String[] args) { 
      //Schedule a job for the event-dispatching thread: 
      //creating and showing this application's GUI. 
      javax.swing.SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        createAndShowGUI(); 
       } 
      }); 
     } 
    } 
+0

恕我直言视频教程是一种不适合学习编程的格式。简单的事情就像在代码中上下滚动以查看代码的其他部分,在视频中效果不佳。 – fabian

+0

你的问题到底是什么?请在堆栈溢出时直接在此处添加所有需要的信息。 –

+0

我想知道如何在窗口中创建基本图形。目前,我只是试图将窗口的屏幕变成黑色。虽然在这一点上,似乎没有回应。我的问题确实是我做错了什么,我该如何解决它。 –

回答

0

你的类应该扩展Canvas

public class Window extends Canvas { 
    ... 
} 

在你render()方法你使用this.getBufferStrategythis.createBufferStrategy。由于这两条指令调用了Canvas类中的方法,如果您未键入extends Canvas,则会出现错误,因为找不到这些方法。

+0

谢谢你的帮助。现在我没有错误。然而,使用我所拥有的代码,我相信我应该有一个黑屏,而在目前这一刻我的屏幕没有变化。 –