Entwickler-Ecke
Alle Sprachen - Alle Plattformen - Java Pong Buttons einfügen
LINUS19 - Fr 24.11.17 15:56
Titel: Java Pong Buttons einfügen
Hallo,
Ich wollte in meinem Pong Spiel Buttons für "neues Spiel" usw. einbauen, doch ich kann die Buttons nicht erstellen könnte mir wer dabei helfen ?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200:
| Hier der Quellcode: import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Pong extends JPanel {
int x = 30, y = 300; // Anfangskoordinaten Schläger 1 int Px = 200, Py = 200; //Anfangskoordinaten Ball int x2 = 770, y2 = 300; //Anfangskoordinaten Schläger 2 int dPx = 10, dPy = 10; // Geschwindigkeit Ball boolean Spieler1o = false; // Pfeiltaste oben am Anfang Taste nicht gedrückt boolean Spieler1u = false; // Pfeiltast unten boolean Spieler2o = false; boolean Spieler2u = false;
public Pong() { setPreferredSize(new Dimension(800, 600)); // Fenstergröße
Ball neu = new Ball(); neu.start(); // Thraed Ball wird gestartet Schläger s = new Schläger(); // Thread Schläger wird gestartet s.start(); // Hier wollte ich die Buttons setzten
}
public void paint(Graphics gr) { // beiden Schläger und Ball Graphics2D g = (Graphics2D) gr; // werden gezeichnet g.setColor(Color.WHITE); g.fill(g.getClipBounds()); // damit die Zeichnung überschrieben wird g.setColor(Color.BLACK); g.fillRect(x, y, 10, 80); // Ball und Schläger werden gezeichnet g.fillOval(Px, Py, 30, 30); g.fillRect(x2, y2, 10, 80); }
class Ball extends Thread { // thread für Ball void bewegen() { Px = Px + dPx; //die Bewegung Py = Py + dPy;
if (Px < 0) { // Ball prallt von der Wand ab Px = 0; dPx = -dPx; } if (Py < 0) { // Ball prallt von der Wand ab Py = 0; dPy = -dPy; } if (Py > 570) { // Ball prallt von der Wand ab Py = 570; dPy = -dPy; } if (Px > 770) { // Ball prallt von der Wand ab Px = 770; dPx = -dPx; }
if (Px == 40 && Py >= y && Py <= y + 80) { // Hier soll er vom Schläger1 abprallen Px = 40; dPx = -dPx; }
if (Px == 740 && Py >= y2 && Py <= y2 + 80) {//// Hier soll er vom Schläger2 abprallen
Px = 740; dPx = -dPx; dPy = -dPy; } repaint(); }
public void run() { // Thread für Ball
while (!isInterrupted()) {
bewegen(); try { Thread.sleep(50); } catch (InterruptedException e) { return; } } } }
class Schläger extends Thread implements KeyListener { Schläger() { addKeyListener(this); // KeyListenr wird hinzugefügt }
public void run() {
while (true) { // solange Spieler Taste drückt //wird Schläger bewegt if (Spieler1o == true) { // Bewegung Schläger1 y -= 12; } if (Spieler1u == true) { y += 12; } if (Spieler2o == true) { // Bewegung Schläger2 y2 -= 12; } if (Spieler2u == true) { y2 += 12; }
if (y2 > 520) { // 600-80 wegen Schlägerlänge y2 = 520; // Damit die Schläger nicht aus dem Bild verschwinden } if (y2 < 0) { y2 = 0; } if (y < 0) { y = 0; } if (y > 520) { y = 520; } repaint(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } }
public void keyPressed(KeyEvent e) { // Spieler 1 hier wird geguckt ob Taste gedrückt if (e.getKeyCode() == KeyEvent.VK_W) { Spieler1o = true; } if (e.getKeyCode() == KeyEvent.VK_S) { Spieler1u = true; }
if (e.getKeyCode() == KeyEvent.VK_UP) { // Spieler2 hier wird geguckt ob Taste gedrückt Spieler2o = true; } if (e.getKeyCode() == KeyEvent.VK_DOWN) { Spieler2u = true; } }
public void keyReleased(KeyEvent e) { // Hier ob Taste wieder losgelassen // wenn ja stoppt Schlägerbewegung if (e.getKeyCode() == KeyEvent.VK_W) { Spieler1o = false; } if (e.getKeyCode() == KeyEvent.VK_S) { Spieler1u = false; } if (e.getKeyCode() == KeyEvent.VK_UP) { Spieler2o = false; } if (e.getKeyCode() == KeyEvent.VK_DOWN) { Spieler2u = false; } }
public void keyTyped(KeyEvent e) { } } }
und die Hauptklasee:
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Fenster extends JFrame { private Pong pong = new Pong();
public Fenster() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); getContentPane().add(pong); pack(); getRootPane();setVisible(true); pong.setFocusable(true);
JButton button = new JButton("Neues Spiel"); // Hier wollte ich die Buttons setzen pong.setLayout(null); button.setBounds(100,20,100,20); pong.add(button); button.setVisible(true);
}
public static void main(String[] args) { new Fenster();
} } |
LG
LINUS19
Christian S. - Fr 24.11.17 16:01
Hallo,
bitte fasse Deinen Code in die entsprechenden Tags, damit er im Forum korrekt dargestellt wird. Das geht so:
[code] ... hier Dein Code ...[/code]
Editiere einfach Deinen Beitrag und füge die Tags hinzu. :zustimm:
Viele Grüße
Christian
LINUS19 - Mo 27.11.17 21:35
Hallo,
Ich habe es jetzt hinbekommen den Button anzeigen zulassen, doch dann funktioniert die Bewegung nicht.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| // Hier die Hauptklasse: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Fenster extends JFrame {
private Pong pong = new Pong();
public Fenster() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); add(new Pong()); setVisible(true); //getContentPane().add(pong); pack(); getRootPane();setVisible(true); pong.setFocusable(true); } public static void main(String[] args) { new Fenster(); } }
// und der Konstruktor: public Pong() { setPreferredSize(new Dimension(Breite,Höhe)); Schläger s = new Schläger(); //s.start(); Ball b = new Ball(); //b.start();
JButton button = new JButton("Spielstart"); setLayout(null); button.setBounds(100,20,100,20); add(button); } |
Hoffe mir kann jemand weiterhelfen, bin echt am verzweifeln.
LG
LINUS19
LINUS19 - Di 28.11.17 13:58
Hallo,
Ich verstehe nicht ganz wie mir der Timer weiterhelfen soll, weil das ganze ja trotzdem parallel ablaufen muss.
LG
LINUS19
Th69 - Di 28.11.17 14:39
Der Timer sorgt dafür, daß alle Aufrufe im UI-Thread stattfinden und du dich nicht um Thread-Synchronisierung kümmern mußt.
Und anstatt dem Thread.sleep(50) gibst du dann die Zeit (50) dem Timer mit, so daß dieser dann selbständig alle 50ms die Timer-Methode aufruft.
Delete - Di 28.11.17 16:56
- Nachträglich durch die Entwickler-Ecke gelöscht -
LINUS19 - Di 28.11.17 19:14
Also verwendet man für die Spieleprogrammierung Timer, nennt sich das ganze dann Gameloop? Hatte davon schon Mal was gelesen doch nicht wirklich verstanden
LG
LINUS19
Symbroson - Di 28.11.17 20:03
Game loop, core loop - wie auch immer - aber nein, das sollte er nicht sein. Eigentlich ist der core loop eine 'while true' Schleife in der du deine Spielmechaniken, Grafik etc behandelst. Wenn du dafür einen Timer nutzt ist das ganze... naja suboptimal weil du dann nicht die schnellstmögliche Geschwinfdigkeit erreichst. Ich weiß nicht genau wie der TTimer arbeitet - ich vermute mal der startet nen Thread und führt die Callback-Methode mit Synchronize aus - das kann dauern. Also lieber dafür entweder nen eigenen Thread starten oder im Hauptthread laufen lassen wenn du sonst nichts zu tun hast.
LINUS19 - Di 28.11.17 20:27
Aber warum ist dann der Button sichtbar wenn ich die Bewegegung rausnehme,sonst aber nicht.
LG
LINUS19
Delete - Di 28.11.17 21:35
- Nachträglich durch die Entwickler-Ecke gelöscht -
LINUS19 - Do 30.11.17 17:38
Ok, danke aber wie soll ich dann die Buttons hinzufügen?
Ich wollte es jetzt doch mit Tasten machen z.B wenn ich F1 drücke das dann das Spiel startet und bei F2 beendet wird, doch ich bekomme es nur hin das Spiel mit F2 zu beenden, das Starten des Spiels funktioniert nicht. Könnte mir wer dabei helfen?
LG
LINUS19
Delete - Do 30.11.17 19:25
- Nachträglich durch die Entwickler-Ecke gelöscht -
LINUS19 - Fr 01.12.17 18:58
Hallo,
Ich hab jetzt das Panel auf die Größe 1000*600 gesetzt und den Button an den Rand gepackt, doch er ist wieder nur sichtbar wenn die Bewegung raus ist und ich folgendes in der Fensterklasse geändert habe :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public Fenster() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); add(new Pong()); // nur so ist der Button anscheinend sichtbar // getContentPane().add(pong); pack(); getRootPane();setVisible(true); pong.setFocusable(true); } |
Kann mir das überhaupt nicht erklären, ich hoffe mir kann jemand weiterhelfen
LG
LINUS19
Th69 - Sa 02.12.17 09:54
Du erzeugst mit add(new Pong()) ein neues Pong-Objekt. Weiter unten verwendest du aber wiederum den Member pong.
Warum also nicht add(pong)?
LINUS19 - Sa 02.12.17 10:22
Hallo,
Erstmal danke für deine Antwort.
Doch jetzt ist der Button nur sichtbar wenn ich mit der Maus drüber gehe.
LG
LINUS19
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!