2016-10-09 2 views
0
)

Ich schreibe ein Spiel, in dem ich Ziegel einer zufälligen Farbe malen muss. Das ist mein Fortschritt bisher. Ich habe eine Klasse von Brick, AllBricks und überschreiben paint-Methode für JPanel:Java: Ich kann nicht jedes Element aus einem Array malen (

private static class Brick { 
    static int x; 
    static int y; 
    static Color color; 

    Brick(int _x, int _y, Color _color){ 
     x = _x; 
     y = _y; 
     color = _color; 
    } 

    void paint(Graphics g) { 
     g.setColor(Color.WHITE); 
     g.drawRoundRect(x, y, BRICK_SIZE, BRICK_SIZE, BRICK_ARC_SIZE, BRICK_ARC_SIZE); 
     g.setColor(color); 
     g.fillRoundRect(x + 1, y + 1, BRICK_SIZE-2, BRICK_SIZE-2, BRICK_ARC_SIZE-1, BRICK_ARC_SIZE-1); 
    } 
private static class AllBricks { 
    private ArrayList<Brick> bList = new ArrayList<>(); 

    AllBricks(){ bList.clear(); } 

    void add (Brick b){ bList.add(b); } 

    void paint(Graphics g) { 
     if(bList.size()>0) { 
      for (Brick brick : bList) brick.paint(g); 
     } 
    } 
} 
private static class GameField extends JPanel { 
    @Override 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     allBricks.paint(g); 
    } 
} 

Und jetzt, wenn ich meine Hauptschleife nennen, das Hinzufügen neue Blöcke und versucht, sie zu zeichnen, ich nur den zuletzt hinzugefügten Block sehen, aber nicht alle von ihnen ...

private void loop() 
{ 
    while (true) { 
     delay.wait(1000); 

     Brick b1 = new Brick(random.nextInt(WIN_WIDTH - BRICK_SIZE), random.nextInt(WIN_HEIGHT - BRICK_SIZE), COLORS.get(random.nextInt(COLORS.size() - 1))); 
     allBricks.add(b1); 
     mainField.repaint(); 
    } 
} 

Können Sie mir bitte helfen, zuvor gemalte Blöcke auf dem Bildschirm zu speichern?

+1

'Kannst du mir bitte helfen, vorher gemalte Blöcke auf dem Bildschirm zu speichern?' - du musst alle neu streichen jedes Mal, wenn die Komponente neu lackiert wird. Außerdem sollten Sie 'paintComponent (...)' des Panels überschreiben, nicht paint(). Die andere Option besteht darin, zu einem "BufferedImage" zu malen. Weitere Informationen und Arbeitsbeispiele zu diesem Thema finden Sie unter [Custom Painting Approaches] (https://tips4java.wordpress.com/2009/05/08/custom-painting-approaches/). – camickr

+0

Jetzt, da ich paintComponent überschreibe - nichts ändert .. und ja, rufe ich allBlocks.paint() -Methode auf, die durch alle Blöcke im Array iteriert, und nennt es .paint(); – Vanechka

+0

Ich weiß nichts, das Sie noch ändern müssen, um Ihren Code zu ändern. Du hast meine erste Aussage verpasst, die am wichtigsten ist !!! Sie verpassten auch den Punkt über das Lesen der Informationen in den Link gefunden. – camickr

Antwort

1

Die X- und Y-Koordinate Ihres Bausteins sollte nicht statisch sein. Da es statisch ist, haben alle Steine ​​einen gemeinsamen x- und y-Wert (also werden alle Steine ​​an der gleichen Position gezeichnet)

Verwandte Themen