2016-04-26 33 views
0

ゲームを作成していて、背景と主人公が読み込まれていません。私は、変数を宣言するのはここです:私は、画像を取得する場所画像がキャンバスに表示されない(Java)

private BufferedImage background; 
private BufferedImage player; 

ここにあります:

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(); 
} 

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(); 
} 

は、ここに私の方法をレンダリングします

}

私のコードで何が問題になっていますか?多くのことを行うことはありません

あなたの start方法で Thread "空" を作成している
+0

は、[実行可能な例](https://stackoverflow.com/help/mcve)を提供することを検討実装しているのでこれはあなたの問題を示しています。これはコードダンプではありませんが、あなたがしていることの例はあなたが持っている問題を強調表示します。これにより混乱が少なくなり、より良い応答が得られます – MadProgrammer

答えて

1

...

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

代わりに、あなたはおそらく何かのようにやりたい...

synchronized void start() { 

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

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

} 

MainRunnable

+0

それが問題を解決しました!私はこれを逃したとは信じられません。ありがとうございます –

+0

森にようこそ、木々のことを見て;) – MadProgrammer

関連する問題