Hintergrund-Bild für einfache Spiel?

Habe ich nach der Java Spiel Programmieren für Anfänger tutorial-Reihe, und wünschte sich, zu Experimentieren, indem ein hintergrund-Bild. Leider, wenn ich es Rendern durch die paintComponent Methode, es bewegt sich mit meinem sprite (wenn auch auf einem Gerät kontinuierlich im Gegensatz zu fünf), und wenn ich das Rendern über die paint-Methode, bekomme ich eine seltsame, flackernde Feld, das entspricht der Farbe bezeichnet in der setBackground (color) Eigenschaft des JFrame und es bewegt sich mit der sprite identisch zu der vorherigen Instanz (innerhalb paintComponent).

Wie könnte ich den code so auf das Bild zu statisch bleiben, als hintergrund sein soll?

Code:

public class JavaGame extends JFrame{

int x, y;
private Image dbImage;
private Graphics dbg;
Image ghost;
Image bg;


public class AL extends KeyAdapter{
    public void keyPressed(KeyEvent e){
        int keyCode = e.getKeyCode();

        if(keyCode == e.VK_LEFT){
            if(x <= 8)
                x = 8;
            else
                x += -5;
        }
        if(keyCode == e.VK_RIGHT){
            if(x >= 235)
                x = 235;
            else
                x += +5;
        }
        if(keyCode == e.VK_UP){
            if(y <= 18)
                y = 18;
            else
                y += -5;
        }
        if(keyCode == e.VK_DOWN){
            if(y >= 235)
                y = 235;
            else
                y += +5;
        }
    }
    public void keyReleased(KeyEvent e){

    }

}

public JavaGame(){
    //Load images
    ImageIcon i = new ImageIcon("C:/Users/Taylor/workspace/Java game/src/ghost.png");
    ghost = i.getImage();

    ImageIcon j = new ImageIcon("C:/Users/Taylor/workspace/Java game/src/bg.png");
    bg = j.getImage();

    //Game properties
    addKeyListener(new AL());
    setTitle("Java Game");
    setSize(500, 500);
    setResizable(false);
    setVisible(true);
    setBackground(Color.GRAY);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    x = 150;
    y = 150;
}

public void paint(Graphics g){
    g.drawImage(bg, 0, 0, null);

    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, x, y, this);
}

public void paintComponent(Graphics g){
    g.setColor(Color.WHITE);
    g.drawImage(ghost, x, y, this);

    repaint();
}


public static void main(String[] args) {
    new JavaGame();

}

Bilder:

Hintergrund-Bild für einfache Spiel?
Hintergrund-Bild für einfache Spiel?

  • Im Allgemeinen, wenn Sie einen Screenshot, sollten Sie diese Bearbeiten, um nur den relevanten Teil (ALSO, das Spiel-Fenster).
  • Rufen Sie nicht repaint aus paintComponent. repaint (irgendwann) fordert paint fordert paintComponent fordert repaint, es ist eine unendliche Schleife.
  • Wie bereits in Wie erstelle ich screenshots?, combo. alt+printscreen wird auf Windows-capture - nur das aktive Fenster Bereich.
  • Mögliche Duplikate von Zeigen eine animierte BG in Swing (ja, Virginia, es funktioniert auch für statische Hintergründe).
  • Abbrechen, der Gedanke ich war zu vorschnell in meiner Beurteilung. Diese Frage ist nicht ein Duplikat der verlinkten Frage. Tut mir Leid, dass. 😛
InformationsquelleAutor tadamson | 2012-08-22
Schreibe einen Kommentar