2016-04-26 169 views
0

我正在創建一個遊戲,背景和主角不會加載。此處,我聲明變量:圖像不顯示在畫布上(Java)

private BufferedImage background; 
private BufferedImage player; 

這裏就是我得到的圖像:

try { 
    background = ImageIO.read(this.getClass().getResourceAsStream("/res/Background.jpg")); 
    player = ImageIO.read(this.getClass().getResourceAsStream("/res/Player.jpg")); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

這裏是我的渲染方法:

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

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

    Graphics g = bs.getDrawGraphics(); 

    g.drawImage(background, 0, 0, this); 
    g.drawImage(player, 0, 0, this); 

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

這裏是我的全班同學:

public class Main extends Canvas implements Runnable, KeyListener { 

    Thread t; 
    boolean running = false; 

    private BufferedImage background; 

    private BufferedImage player; 

    public Main() { 

     setFocusable(true); 
     requestFocus(); 
     addKeyListener(this); 

     try { 
      background = ImageIO.read(this.getClass().getResourceAsStream("/res/Background.jpg")); 
      player = ImageIO.read(this.getClass().getResourceAsStream("/res/Player.jpg")); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void run() { 

     while (running) { 
      tick(); 
      render(); 
     } 

     stop(); 

    } 

    synchronized void start() { 

     if (running) return; 
     running = true; 

     Thread t = new Thread(); 
    t.start(); 

} 

synchronized void stop() { 
    try { 
     t.join(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    System.exit(0); 
} 

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

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

    Graphics g = bs.getDrawGraphics(); 

    g.drawImage(background, 0, 0, this); 
    g.drawImage(player, 0, 0, this); 

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

public void tick() { 

} 

@Override 
public void keyPressed(KeyEvent e) { 
    int code = e.getKeyCode(); 

    if (code == KeyEvent.VK_ESCAPE) { 
     System.exit(0); 
    } 
} 

@Override 
public void keyReleased(KeyEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyTyped(KeyEvent e) { 
    // TODO Auto-generated method stub 

} 

public static void main(String[] args) { 
    JFrame f = new JFrame("Mission Sahara"); 
    Main m = new Main(); 

    f.add(m); 
    f.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    f.setUndecorated(true); 
    f.setResizable(false); 
    f.setVisible(true); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    m.start(); 
} 

}

我的代碼有什麼問題?

+0

考慮提供一個[可運行示例](https://stackoverflow.com/help/mcve)這表明你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的困惑和更好的反應 – MadProgrammer

回答

1

你在你的start方法創建一個 「空」 Thread ...

Thread t = new Thread(); 
t.start(); 

,不會做很多。

相反,你可能想要做像...

synchronized void start() { 

    if (running) { 
     return; 
    } 
    running = true; 

    Thread t = new Thread(this); 
    t.start(); 

} 

因爲Main工具Runnable

+0

這解決了問題!我無法相信我錯過了這一點。謝謝 –

+0

歡迎來到森林,注意樹木;) – MadProgrammer