2016-04-26 12 views
0

Ich erstelle ein Spiel und der Hintergrund und der Hauptcharakter werden nicht geladen. Hier ist, wo ich die Variablen deklarieren:Bild wird nicht auf Canvas (Java) angezeigt

private BufferedImage background; 
private BufferedImage player; 

Hier ist, wo ich die Bilder:

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

Hier ist meine Render-Methode:

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

Hier ist meine ganze Klasse:

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

}

Was ist falsch an meinem Code?

+0

Betrachten Bereitstellung eines [runnable Beispiel] (https://stackoverflow.com/help/mcve) tun welches dein Problem demonstriert. Dies ist kein Code-Dump, sondern ein Beispiel dafür, was Sie tun, um das Problem zu verdeutlichen, das Sie haben. Dies führt zu weniger Verwirrung und besseren Antworten – MadProgrammer

Antwort

1

Sie erstellen ein "leeres" Thread in Ihrem start Methode ...

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

die viel nicht tun wird.

Stattdessen möchten Sie wahrscheinlich so etwas wie ...

synchronized void start() { 

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

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

} 

seit Main Arbeitsgeräte Runnable

+0

Das hat das Problem gelöst! Ich kann nicht glauben, dass ich das vermisst habe. Danke –

+0

Willkommen im Wald, pass auf die Bäume auf;) – MadProgrammer

Verwandte Themen