2016-03-22 13 views
0

Ich mache Schlange für eine Schulaufgabe und habe ein Problem festgestellt, als ich versucht habe, den Hintergrund klar zu machen. Es funktionierte, bevor ich die Hintergrundfarbe änderte. Jetzt wird es jedoch nichts mehr löschen, was gezeichnet und dann verdeckt wurde.Gibt es eine Möglichkeit, den aktuellen Desktop-Hintergrund zu importieren?

Zum Beispiel: Wenn sich der Spielstand ändert, erscheinen die Zahlen übereinander und die vorherigen Positionen der Schlange werden nicht gelöscht und er scheint immer noch da zu sein. Ich habe eine Idee, bei der ich den aktuellen Desktop-Hintergrund verwenden würde.

Klasse 1:

public class gameWindow extends JFrame { 

    public gameWindow() { 

add(new SashaOhayonSnakeFST()); 
setResizable(false); 
pack(); 
setLocationRelativeTo(null); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 


    public static void main(String[] args) { 

EventQueue.invokeLater(new Runnable() { //Creates queue to run events 
    public void run() {   //runs these events on new window 
    JFrame finalWindow = new gameWindow(); 
    finalWindow.setVisible(true); 
    finalWindow.setBackground(new Color (0,0,0,0)); 





    } 
}); 
    } 
    } 

(Edited) Klasse 2:

private void draw(Graphics g) { 


    if (inGame) { 

     g.drawImage(apple, appleCoordinateX, appleCoordinateY, this); //Draws apple 


     for (int i = 0; i < dotNum; i++) { //Runs loop to draw each piece of the snake 
      if (i == 0) { 
       g.drawImage(head, coordinateX[i], coordinateY[i], this); //Draws the head in a different colour to body 
      } else { 
       g.drawImage(body, coordinateX[i], coordinateY[i], this); //Draws body 
      } 
     } 

     if ((Integer.toString(score*dotNum).length()) >= 3) { 
     size = 23; 
     fromEdge = 4; 
     } else if ((Integer.toString(score*dotNum).length()) >= 4) { 
      size = 15; 
      fromEdge = 3; 
     } 
     Font font = new Font("Comic Sans", Font.BOLD, size); 
     g.setColor(Color.RED); 
     g.setFont(font); 
     g.drawString(Integer.toString(score*dotNum), fromEdge, 30); //Draws scorekeeper 

    Toolkit.getDefaultToolkit().sync(); 
+0

Opaque sein Können Sie die Verwendung des 'Desktop background' erklären? –

+0

Bei der vorherigen Verwendung von repaint() (wenn der Hintergrund schwarz war) wurde die Tinte, die sich auf dem Bildschirm befand, durch die Hintergrundfarbe gelöscht. Da die Hintergrundfarbe jedoch transparent ist, wird sie im Wesentlichen mit nichts übermalt, da die Hintergrundfarbe jetzt nicht mehr vorhanden ist. Indem ich den Hintergrund des Desktops erhalte, kann ich meine eigene Form der Transparenz erzeugen, indem ich den Desktophintergrund neu streiche, so dass das Fenster in den Hintergrund passt. –

+0

Mögliches Duplikat von [Graphics2D löscht transparentes Bild nicht] (http://stackoverflow.com/questions/10406750/graphics2d-not-clearing-transparent-image) –

Antwort

1

Ich glaube, Sie müssen die Hintergrundfarbe für den Inhaltsbereich des JFrame setzen, nicht die JFrame.

myJFrame.getContentPane().setBackground(desiredColor); 

Für Platten & Etiketten, müssen Sie das Element gesetzt

jpanel.setOpaque(true); 
+0

Bereits versucht, dies, es hat nicht funktioniert. Der nächste, den ich bekommen habe, war awt.Robot, um den Hintergrund des transparenten Fensters zu erfassen und es als Hintergrund zu setzen, dies verlangsamte das Spiel jedoch auf unspielbare Geschwindigkeiten. –

Verwandte Themen