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();
Opaque sein Können Sie die Verwendung des 'Desktop background' erklären? –
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. –
Mögliches Duplikat von [Graphics2D löscht transparentes Bild nicht] (http://stackoverflow.com/questions/10406750/graphics2d-not-clearing-transparent-image) –