Also ich habe ein Problem, ich möchte ein ganz simples Pong-Spiel programmieren und habe damit dann auch angefangen, zuerst hatte ich dem Frame ein Panel hinzugefügt, diesem ein JLabel welcher den Balken darstellen soll welchen man auch schon bald mit den Pfeiltasten in alle Richtungen bewegen kann.
Dann kam das erste Problem, ich fügte dem Panel noch ein Label hinzu welches den Ball darstellen sollte, dieser sollte sich auch bewegen mit
Aber das tat er nicht, ich habe mir sogar die Koordinaten ausgeben lassen und es sind immer andere, also müsste er sich doch bewegen oder?
Naja, dann dachte ich mir damit wirst du später noch fertig und ich wollte ein Hintergrundbild hinzufügen nach etlichen versuchen gelang es mir auch aber leider sieht man nun die JLabels nichtmehr da das Hintergrundbild diese anscheinend verdeckt.
Ich komme einfach nicht weiter, könnt ihr mir bitte helfen.
Hier sind meine Klassen:
Klasse "Game"
Klasse "TheView"
Klasse "BalkThread"
Klasse "BallThread"
Dann kam das erste Problem, ich fügte dem Panel noch ein Label hinzu welches den Ball darstellen sollte, dieser sollte sich auch bewegen mit
Code:
JLabel.setLocation(x, y);
Naja, dann dachte ich mir damit wirst du später noch fertig und ich wollte ein Hintergrundbild hinzufügen nach etlichen versuchen gelang es mir auch aber leider sieht man nun die JLabels nichtmehr da das Hintergrundbild diese anscheinend verdeckt.
Ich komme einfach nicht weiter, könnt ihr mir bitte helfen.
Hier sind meine Klassen:
Klasse "Game"
Code:
public class Game {
public static void main(String args[]) {
//Thread's werden erstellt, Priorität wird festgelegt
//und die Frames werden gestartet
Thread Ball = new Thread(new BallThread());
Ball.setPriority(3);
Thread Balk = new Thread(new BalkThread());
Balk.setPriority(7);
Ball.start();
Balk.start();
}
}
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TheView extends JPanel {
Image bgblue; //Hintergrundbild
ImageIcon ii_balk = new ImageIcon(TheView.class.getResource("balk.gif"));
//Balkenbild
JFrame mainFrame = new JFrame("Mein erstes Pong-Spiel");
JLabel jl_balk = new JLabel(ii_balk);//Jlabel in welchen das Balkenbild kommt
JLabel jl_ball = new JLabel("O"); //Soll Ball darstellen
public void view() {
//Grösse und Position wird vom mainFrame festgelegt
mainFrame.setLocation(0, 0);
mainFrame.setSize(800, 600);
//JPanel (this) wird zum mainFrame hinzugefügt
mainFrame.getContentPane().add(this);
//Layout gleich null gesetzt
this.setLayout(null);
//Hintergrundbild wird hinzugefügt
bgblue = getToolkit().getImage("bgblue.gif");
MediaTracker mt = new MediaTracker(this);
mt.addImage(bgblue, 0);
try {
//Warten, bis das Image vollständig geladen ist,
mt.waitForAll();
} catch (InterruptedException e) {
//nothing
}
repaint();
//Balken und ball-Label werden zum JPanel (this) hinzugefügt
this.add(jl_balk);
this.add(jl_ball);
//Größe und Position der JLabels wird festgelegt
jl_balk.setSize(10, 80);
jl_ball.setSize(10, 10);
jl_balk.setLocation(390, 0);
jl_ball.setLocation(700, 500);
//mainFrame wird sichtbar gemacht
mainFrame.setVisible(true);
}
//Methode in welcher das Bild hinzugefügt wird
public void paint(Graphics g) {
//Wenn bild da dann male es drauf
if (bgblue != null) {
g.drawImage(bgblue, 0, 0, this);
}
}
}
Code:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
class BalkThread implements Runnable {
TheView myView = new TheView();
int x = 390, y = 0;
public void run() {
//KeyListener werden zum mainFrame hinzugefügt
myView.mainFrame.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_UP) {
up();
}
if (evt.getKeyCode() == KeyEvent.VK_DOWN) {
down();
}
if (evt.getKeyCode() == KeyEvent.VK_RIGHT) {
right();
}
if (evt.getKeyCode() == KeyEvent.VK_LEFT) {
left();
}
if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
System.exit(0);
}
}
});
myView.view();
}
//Wenn die Pfeiltasten gedrückt werden
//bewegt sich der Balken 10 Pixel in die Richtung
public void up() {
if (y != 0) {
y = y - 10;
myView.jl_balk.setLocation(x, y);
}
}
public void down() {
if (y + 110 != 600) {
y = y + 10;
myView.jl_balk.setLocation(x, y);
}
}
public void left() {
if (x != 0) {
x = x - 10;
myView.jl_balk.setLocation(x, y);
}
}
public void right() {
if (x + 20 != 800) {
x = x + 10;
myView.jl_balk.setLocation(x, y);
}
}
}
Code:
public class BallThread implements Runnable {
TheView myView = new TheView();
public void run() {
int x = 700, y = 500, xChange = 2, yChange = 2;
for (int i = 1; i != 0;) {
//Wenn der Ball gegen die Wand kommt wende
if (x == 0) {
System.out.println("xChange = xChange * (-1)");
xChange = -xChange;
}
if (x == 800) {
System.out.println("xChange = xChange * (-1)");
xChange = -xChange;
}
if (y == 0) {
System.out.println("yChange = yChange * (-1)");
yChange = -yChange;
}
if (y == 600) {
System.out.println("yChange = yChange * (-1)");
yChange = -yChange;
}
//Neue x und y Positionen werden errechnet und der Ball positioniert
x = x + xChange;
y = y + yChange;
myView.jl_ball.setLocation(x, y);
}
}
}