Hallo zusammen
Ich arbeite zurzeit gerade an einer eigenen Version von Pong in Java. Für die Visualisierung verwende ich das AWT.
Es haben sich nun jedoch gewisse Fragen ergeben, von welchen ich mir erhoffte hier einige Antworten zu erhalten.
Zur Steuerung des Spielbalkens verwende ich den KeyListener, folgender Code:
cpos: Position des Cursors/Balkens (obere, linke Ecke des rect), clength/cwidth: Länge/Breite des Cursors, cspeed: Cursorgeschwindigkeit (Anzahl Pixel pro Schritt)
fwidth: Spielfeldbreite, pwidth: Distanz bis zum Spielfeldbeginn
Es funktioniert prinzipiell auch, leider hat dies 2 gravierende Nachteile:
1. Es muss wohl zuerst erkannt werden, dass die Taste gedrückt bleibt. Folglich geht es einen kleinen aber entscheidenden Moment, bis sich der Balken zu bewegen beginnt. Dies ist sehr störend beim Spielen.
2. Muss die Geschwindigkeit mit den Anzahl Pixeln pro Schritt geregelt werden, was zu einer Art "Ruckeln" des Balkens führt je höher die Geschwindkeit wird.
Wäre toll wenn Ihr mir hierzu irgendwelche Tipps und/oder Verbesserungsvorschläge habt!?
Desweiteren sollte der Balken ja über eine Kollisionsabfrage verfügen, so wie die Spielfeldränder. An denen habe ich lediglich "Einfallswinkel = Ausfallswinkel" programmiert. Wenn ich jedoch Spiele wie Pong o.ä. spiele, so scheint es irgendeine Formel für den Balken zu geben, welche den Ausfallswinkel beinflusst. Anscheinend wird dieser irgendwie mit Einfallswinkel, Ort des Auftreffens und Balkengeschwindigkeit berechnet. Weiss jemand mehr darüber? Oder hat jemand eine Idee?
Zu guter letzt strauchle ich noch sehr mit der "Geschwindigkeit" des ganzen Spieles. Beim Spielball wird zwischen jeder Berechnung der nächsten Position des Balles eine Thread.sleep(x) initiiert. Die nächste Position kann immer nur ein Pixel direkt neben der aktuellen Position sein. Folglich geht ein Schritt in eine schräge Richtung, z.B. 45° (immer Pixel oben rechts), gleich lange wie z.B. 0°, also gerade. 45° sollte aber Wurzel 2 mal länger gehen. Beim Balken wird die Geschwindigkeit ganz anders gesteuert, siehe oben. Eine einheitliche Lösung wäre aber wünschenswert, nur weis ich nicht genau wie diese umzusetzen wäre.
Über Antworten würde ich mich ausgesprochen freuen
MfG
Dread
Ich arbeite zurzeit gerade an einer eigenen Version von Pong in Java. Für die Visualisierung verwende ich das AWT.
Es haben sich nun jedoch gewisse Fragen ergeben, von welchen ich mir erhoffte hier einige Antworten zu erhalten.
Zur Steuerung des Spielbalkens verwende ich den KeyListener, folgender Code:
Java:
public void keyPressed(KeyEvent a){
if(a.getKeyCode()==KeyEvent.VK_UP){
cpos = cpos-cspeed;
if(cpos<=pwidth){ cpos = pwidth+1; }
repaint(620,cpos,cwidth,cpos+clength+cspeed);
}
if(a.getKeyCode()==KeyEvent.VK_DOWN){
cpos = cpos+cspeed;
if(cpos>=fwidth+pwidth-clength){ cpos = fwidth+pwidth-clength; }
repaint(620,cpos-cspeed,cwidth,cpos+clength+cspeed);
}
}
fwidth: Spielfeldbreite, pwidth: Distanz bis zum Spielfeldbeginn
Es funktioniert prinzipiell auch, leider hat dies 2 gravierende Nachteile:
1. Es muss wohl zuerst erkannt werden, dass die Taste gedrückt bleibt. Folglich geht es einen kleinen aber entscheidenden Moment, bis sich der Balken zu bewegen beginnt. Dies ist sehr störend beim Spielen.
2. Muss die Geschwindigkeit mit den Anzahl Pixeln pro Schritt geregelt werden, was zu einer Art "Ruckeln" des Balkens führt je höher die Geschwindkeit wird.
Wäre toll wenn Ihr mir hierzu irgendwelche Tipps und/oder Verbesserungsvorschläge habt!?
Desweiteren sollte der Balken ja über eine Kollisionsabfrage verfügen, so wie die Spielfeldränder. An denen habe ich lediglich "Einfallswinkel = Ausfallswinkel" programmiert. Wenn ich jedoch Spiele wie Pong o.ä. spiele, so scheint es irgendeine Formel für den Balken zu geben, welche den Ausfallswinkel beinflusst. Anscheinend wird dieser irgendwie mit Einfallswinkel, Ort des Auftreffens und Balkengeschwindigkeit berechnet. Weiss jemand mehr darüber? Oder hat jemand eine Idee?
Zu guter letzt strauchle ich noch sehr mit der "Geschwindigkeit" des ganzen Spieles. Beim Spielball wird zwischen jeder Berechnung der nächsten Position des Balles eine Thread.sleep(x) initiiert. Die nächste Position kann immer nur ein Pixel direkt neben der aktuellen Position sein. Folglich geht ein Schritt in eine schräge Richtung, z.B. 45° (immer Pixel oben rechts), gleich lange wie z.B. 0°, also gerade. 45° sollte aber Wurzel 2 mal länger gehen. Beim Balken wird die Geschwindigkeit ganz anders gesteuert, siehe oben. Eine einheitliche Lösung wäre aber wünschenswert, nur weis ich nicht genau wie diese umzusetzen wäre.
Über Antworten würde ich mich ausgesprochen freuen
MfG
Dread