Hallo an alle Interessierten!
Ich bin grad dabei den 4 Miliionsten Pong-Klon zu schreiben. Ich versuche mich damit ein wenig in Threads und EventHandling einzuarbeiten.
Momentan häng ich jedoch leider bei einem eigentlich sehr trivialen Problem: Ich möchte für ein laufendes Spiel eine Pausentaste realiseren. Mit der Taste P soll sowohl das Speil gestoppt, als auch wieder gestartet werden können. Dafür hab ich mir folgende Zeile ausgedacht:
Doch leider bewirkt die Zeile nichts. Schreibe ich hingegen:
dann kann ich das Spiel immerhin stoppen.
Alle anderen Tasten funktionieren genau so wie ich mir das denke.
Was mache ich falsch?
Anbei der komplette Code für mein Programm (noch ohne echte Funktionen):
Danke für eure Hilfe!
Viele Grüße
earlgrey_tea
Ich bin grad dabei den 4 Miliionsten Pong-Klon zu schreiben. Ich versuche mich damit ein wenig in Threads und EventHandling einzuarbeiten.
Momentan häng ich jedoch leider bei einem eigentlich sehr trivialen Problem: Ich möchte für ein laufendes Spiel eine Pausentaste realiseren. Mit der Taste P soll sowohl das Speil gestoppt, als auch wieder gestartet werden können. Dafür hab ich mir folgende Zeile ausgedacht:
Java:
public class Tastatureingabe extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_P){
abbruch = !(abbruch);
}
Doch leider bewirkt die Zeile nichts. Schreibe ich hingegen:
Java:
public class Tastatureingabe extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_P){
abbruch = true;
}
dann kann ich das Spiel immerhin stoppen.
Alle anderen Tasten funktionieren genau so wie ich mir das denke.
Was mache ich falsch?
Anbei der komplette Code für mein Programm (noch ohne echte Funktionen):
Java:
import java.awt.*;
import java.awt.event.*;
/*
* Die Klasse stell sowohl die Spiellogik als auch die grafische Ausgabe bereit.
*/
/**
*
* @author thorsten
*/
@SuppressWarnings("serializable")
public class GUIPong extends Frame implements Runnable {
// Sollte Ball auch als Panel realisiert werden ?
Panel schlaeger1, schlaeger2, Ball, Hintergrund;
Label l1;
Thread myThread;
private final int SPEED = 10;
private final long WAIT = 50;
private int high1, high2;
boolean w_pressed, s_pressed, up_pressed, down_pressed;
boolean abbruch = false;
public GUIPong (){
this("Pong...", 40, 40);
}
public GUIPong (String titel, int w, int h){
setTitle(titel);
setSize(w, h);
addWindowListener(new WindowAdapter(){
@Override()
public void windowClosing (WindowEvent e){
System.exit(0);
}
});
schlaeger1 = new Panel();
schlaeger2 = new Panel();
l1 = new Label();
Ball = new Panel();
Hintergrund = new Panel();
high1 = 150;
high2 = 150;
setLayout(null);
setVisible(true);
setBounds(10,10,300,300);
schlaeger1.setBounds(378, high1 , 20 , 60);
schlaeger2.setBounds(10, high2 , 20 , 60);
l1.setBounds(250,25,300,50);
Hintergrund.setBounds(0, 0, 400, 400);
add(schlaeger1);
add(schlaeger2);
add(Hintergrund);
schlaeger1.setBackground(Color.white);
schlaeger2.setBackground(Color.white);
Hintergrund.setBackground(Color.black);
addKeyListener(new Tastatureingabe());
addKeyListener(new Tastatureingabe());
//addKeyListener(this);
}
public void run(){
while (true){
while (!(abbruch)){
if (up_pressed){
high1 -= SPEED;
}
if (down_pressed){
high1 += SPEED;
}
if (w_pressed){
high2 -= SPEED;
}
if (s_pressed){
high2 += SPEED;
System.out.println(high2);
}
schlaeger1.setBounds(378,high1,20,60);
schlaeger2.setBounds(10, high2 , 20 , 60);
try{
myThread.sleep(WAIT);
}catch (InterruptedException e) {System.out.println(e.toString());}
}
}
}
public class Tastatureingabe extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_UP){
up_pressed = true;
}
if (e.getKeyCode()==KeyEvent.VK_DOWN){
down_pressed = true;
}
if (e.getKeyCode()==KeyEvent.VK_W){
w_pressed = true;
}
if (e.getKeyCode()==KeyEvent.VK_S){
s_pressed = true;
}
if (e.getKeyCode()==KeyEvent.VK_ESCAPE){
System.exit(0);
}
if (e.getKeyCode()==KeyEvent.VK_P){
abbruch = !(abbruch);
}
}
public void keyReleased (KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_UP){
up_pressed = false;
}
if (e.getKeyCode()==KeyEvent.VK_DOWN){
down_pressed = false;
}
if (e.getKeyCode()==KeyEvent.VK_W){
w_pressed = false;
}
if (e.getKeyCode()==KeyEvent.VK_S){
s_pressed = false;
}
}
public void keyTyped (KeyEvent e){}
}
public static void main(String[] args) {
// TODO code application logic here
GUIPong g = new GUIPong();
g.run();
}
}
Danke für eure Hilfe!
Viele Grüße
earlgrey_tea