Ich arbeite derzeit an einem kleinen Java Spiel. Ein Snake Spiel um genauer zu sein. Dabei verfolge ich folgendes Konzept:
Ich habe eine Surface Klasse, welche direkt in der main-Methode initialisiert wird.
Die Surface Klasse enthält die gesamte Oberfläche und fängt alle Aktionen vom Benutzer auf (KeyListener)
In der Surface Klasse initialisiere ich ein Snake Objekt. Dieses Snake Objekt erbt von keiner Klasse.
Zu meinem Problem: Wie man es vom Snake kennt, frisst dieser irgendwelche Objekte, und wird danach grösser. Und diese Objekte (bei mir Diamanten) anzuzeigen, habe ich die paintComponent Methode in meiner Surface Klasse implementiert. Jedoch schein diese noch nicht zu funktionieren. Sobald ich ein repaint() einsetzt, scheint die Schlange unterhalb des JPanels zu sein. Und ist nur noch zu sehen, wenn sich
Und natürlich noch Code, um das Ganze zu verdeutlichen:
Und ausserdem. Hier erstelle ich meine Schlange (und ja, ich habe absichtlich Buttons gewählt
)
Hier noch 2 kleine Screenshots:
Ohne paintComponent
Mit paintComponent. Die Schlange ist nun nur noch zu sehen, wenn man auf dem JFrame ist.
Ich hoffe ihr seid nicht zu streng mit mir, da ich recht neu in der Programmierung bin ^^
Ich habe eine Surface Klasse, welche direkt in der main-Methode initialisiert wird.
Die Surface Klasse enthält die gesamte Oberfläche und fängt alle Aktionen vom Benutzer auf (KeyListener)
In der Surface Klasse initialisiere ich ein Snake Objekt. Dieses Snake Objekt erbt von keiner Klasse.
Zu meinem Problem: Wie man es vom Snake kennt, frisst dieser irgendwelche Objekte, und wird danach grösser. Und diese Objekte (bei mir Diamanten) anzuzeigen, habe ich die paintComponent Methode in meiner Surface Klasse implementiert. Jedoch schein diese noch nicht zu funktionieren. Sobald ich ein repaint() einsetzt, scheint die Schlange unterhalb des JPanels zu sein. Und ist nur noch zu sehen, wenn sich
Und natürlich noch Code, um das Ganze zu verdeutlichen:
Java:
public Surface(int width, int height)
{
this.width = width;
this.height = height;
// Create the JFrame
jframe.setSize(width, height);
jframe.setResizable(false);
jframe.setLayout(null);
jframe.add(this); // Add the JPanel to the JFrame
jframe.setVisible(true);
// Create the JPanel
setLayout(new BorderLayout());
setBounds(0, 0, 400, 400);
setBackground(Color.DARK_GRAY);
// Add the KeyListener
addKeyListener(this);
setFocusTraversalKeysEnabled(true);
setFocusable(true);
requestFocusInWindow();
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(50, 50, 40, 40);
g.setColor(Color.RED);
repaint();
}
Und ausserdem. Hier erstelle ich meine Schlange (und ja, ich habe absichtlich Buttons gewählt
Java:
private void createSnake()
{
snakeButtonx[0] = 100; //Sets the starter position of the snake
snakeButtony[0] = 150;
JButton tempButton; //temporary Button for adding button to the Snake
// Initially the snake has small length 3
for (int i = 0; i < sizeSnake; i++)
{
snakeButton[i] = new JButton("" + i);
snakeButton[i].setEnabled(false); // Disable the buttons so you cant click it
tempButton = snakeButton[i];
Surface.jframe.add(tempButton);
snakeButton[i].setBounds(snakeButtonx[i], snakeButtony[i], 10, 10);
snakeButtonx[i + 1] = snakeButtonx[i] - 10;
snakeButtony[i + 1] = snakeButtony[i];
}
}
Hier noch 2 kleine Screenshots:
Ohne paintComponent

Mit paintComponent. Die Schlange ist nun nur noch zu sehen, wenn man auf dem JFrame ist.

Ich hoffe ihr seid nicht zu streng mit mir, da ich recht neu in der Programmierung bin ^^