Fragen zu meinem Pong-Clone

Status
Nicht offen für weitere Antworten.

milchkaffee

Mitglied
Hallo zusammen!

Hier also meine neue Pong-Version, in der ich alle Klassen unter einer Hauptklasse vereint habe, um Probleme beim gegenseitigen Zugriff von ausgelagerten Klassen zu umgehen; dadurch konnte ich auch viele der 'Krücken' abschaffen, wenn auch die eine oder andere noch vorhanden ist.
Ist dadurch leider etwas lang geworden, aber ich habe den Code nach Kräften mit Anmerkungen dokumentiert...

Was derzeit noch ein Problem ist:

- 'Pause' funktioniert nicht (siehe Key-Abfrage ganz am Schluss und 'paused'-Schalter in der gScreen-Klasse oben, hmm)
- Restart-Funktion mittels Space klappt nicht, wenn Applet mit 'view'-Methode aufgerufen wurde!
- Ballreflektion in Abhängigkeit von der Abweichung von der Padmitte klappt nicht (Code auskommentiert, arbeite noch dran)
- variabler Schwierigkeitsgrad Ballgeschwindigkeit/Computerpad fehlt noch (sollte nicht so schwierig sein)
- beim Starten mit der 'run file'-Methode wird nur ein sehr kleines Fenster geöffnet (gibt es da eine Möglichkeit mit 'setPreferredSize' oder so?)
- Der Mauszeiger bleibt sichtbar (irritierend) und das Pad hängt beim aus- und eintreten des Zeigers aus dem Zeichenbereich
- beim benutzen der Thread-pause() ist kein Anzeigen von Text oder sonstiges möglich (Hilfe!!)
- automatische Größenanpassung ans Browserfenster fehlt (bin für Tipps dankbar!)
- Vollbildmodus im Browser-Modus fehlt (vielleicht hat da jemand ein paar Hinweise parat)
- bin unsicher, ob das Applet wirklich beendet wird, wenn Browserfenster geschlossen wird
- bin offen für sonstige Hinweise, was besser gemacht werden könnte!
.
.
.

EDIT: wegen der besseren Übersicht habe ich den gesamten veralteten Code entfernt!
.
.
.

Vielleicht habt ihr Tipps zur Pausefunktion und Browserfenster-Anpassung oder anderen Dingen...
Danke schon mal!

schöne Grüße,

milchkaffee
 

Fu3L

Top Contributor
Mir ist zwar nciht ganz klar, wie dein KeyListener funktionieren soll, aber ich zeig dir wie ich das bei mir umgesetzt hab:

Code:
public class GamePanel extends Canvas implements Runnable, KeyListener {

Das GamePanel (bei dir wohl gScreen) implementiert KeyListener. Danach addest du den KeyListener zu deinem Panel, wie du dass auch mit dem MouseMotionListener gemacht hast: addKeyListener(this);

Dann fügst du in dein gScreen noch die KeyListener Methoden ein (wieder wie beim MouseMotionListener und bei dir halt mit paused anstatt isPaused):

Code:
//Beim Loslassen einer Taste
public void keyReleased(KeyEvent e) {
		
	if((e.getKeyCode() == KeyEvent.VK_P) || (e.getKeyCode() == KeyEvent.VK_PAUSE)) {
			
		isPaused = !isPaused;
				
	}
		
}

//Müssen nur überschrieben werden:
public void keyPressed(KeyEvent e) {	}
	
public void keyTyped(KeyEvent e) {	}

Mit Applets kenn ich mich sonst leider recht wenig aus :(

Edit: Fast vergessen: Du musst (zumindest bei normalen Applikationen) das Panel fokussierbar machen und dir den Fokus holen:

Code:
setFocusable(true);
grabFocus();
 

milchkaffee

Mitglied
Hallo Fu3L,

Vielen Dank für deine schnelle Antwort!
Mein Programm baut auf einem anderen auf, das ich vorher gebastelt hatte; wie genau der KeyListener funktioniert erschließt sich mir auch nicht so ganz - ich hatte ihn wohl mit Netbeans automatisch eingefügt. Wie sonst würde er auch im GeneratedCode auftauchen:
Code:
gScreen.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                gScreenKeyPressed(evt);
            }
Damit wird dem JPanel-Ableger gScreen ein recht verschachtelter KeyAdapter-Listener verpasst...

Die eigentliche Methode zum Funktionsaufruf baut dann wohl direkt darauf auf:
Code:
private void gScreenKeyPressed(java.awt.event.KeyEvent evt) {                                   
    
    // Keycodes aus Klasse gScreen abfragen:
    int taste = evt.getKeyCode();
    
    //if (taste == KeyEvent.VK_LEFT && xPosBall1 >= d) xPosBall1 -= 8;
    //if (taste == KeyEvent.VK_RIGHT && xPosBall1 + d <= getWidth()) xPosBall1 += 8;
    //if (taste == KeyEvent.VK_SPACE) System.exit(0);

    // Wenn Schalter 'running' aus, Neustart mit SPACE
    if (running == false && taste == KeyEvent.VK_SPACE) {
        gameScore.resetPlayerScores();
        ball1.resetBall();
        running = true;
    }
.
.

Vielleicht liegt es wirklich nur daran, dass der Browser den Focus auf recht aggressive Weise vereinnahmt. Irgendwie auch komisch, dass das Applet für sich gestartet den Space-Event abfängt, aber nicht den TAB-Event und per Browser überhaupt nichts.

Jedenfalls, da ich nach wie vor nicht so recht verstehe, wie die Methode genau funktioniert, werde ich erst mal deinen Vorschlag probieren, hoffentlich mit mehr Erfolg! :]
Allerdings sollte ich vorher den Generated Code von Netbeans entfernen...

Übrigens hatte ich das Problem mit dem nicht geholten Focus schon früher und deswegen das hier eingefügt, was aber anscheinend im Browser nicht funktioniert:
Code:
gScreen.requestFocus();

Gruß,

milchkaffee
 
G

Guest

Gast
Jetzt habe ich doch noch einen anderen Versuch gestartet (wegen dem Focus-Problem):

eine Lösung ist, die Anweisung
Code:
gScreen.requestFocus();
einfach in die gScreen-Klasse hineinzupacken, damit sie immer wieder aufgerufen wird (der Browser oder das OS entzieht dem Applet sonst den Focus). Problem dabei: läuft das Applet im Hintergrund weiter (im Tab) zieht es von allen anderen Fenstern dauern den Focus ab (z.B. auch von diesem Editor-Fenster hier) :(

Was kann man da tun?

milchkaffee
 

milchkaffee

Mitglied
Ich habe die Tastenabfrage ganz unten im Code abgeändert:

Code:
// Wenn Schalter 'running' aus, Neustart mit SPACE
    if ( taste == KeyEvent.VK_SPACE && !running ) {
        gameScore.resetPlayerScores();
        ball1.resetBall();
        running = true;
    }
    // Wenn Spiel nicht zuende ist und noch nicht im Pausemodus, in Pausemodus mit 'P' schalten
    // Wenn Spiel im Pausemodus, fortsetzen mit 'P'
    if ( taste == KeyEvent.VK_P && running && !paused ) paused = true;
    
    else if ( taste == KeyEvent.VK_P && paused ) paused = false;
Jetzt läuft es problemlos! Trotzdem danke für den Tipp mit dem KeyListener, werde ich bei Gelegenheit nochmal aufgreifen...
Einzig das andauernde gScreen.requestFocus(); im Browser stört nun...
da müsste wohl eine andere Art von Focus-Request her, bei Mausklick auf den Zeichenbereich z.B....

milchkaffee[/code]
 

milchkaffee

Mitglied
Heute ist mir aufgefallen, dass der IE6 überhaupt kein Wiedereinfangen des Focus für das Java Applet zulässt - Firefox hingegen zieht den Focus selbst von anderen Tabs/Fenstern ab, wie ich im letzten Post geschildert habe...

Kann man da was gegen tun?

EDIT: hat sich erledigt, nicht reproduzierbar, solange dauernd Focus-Request stattfindet.

milchkaffee
 

milchkaffee

Mitglied
Obwohl sich der Code meines Applets mittlerweile völlig verändert hat, hier noch mal ein paar allgemeine Probleme, auf die ich noch Antworten suche:


- beim Starten mit der 'run file'-Methode unter Netbeans wird nur ein sehr kleines Fenster geöffnet; im 'index.html', das wiederrum JApplePong.jar aufruft (beim Öffnen mit der 'view'-Methode in NB), ist folgende Zeile enthalten:
<applet archive="Pong.jar" code="jApplets/pong/JApplePong.class" width="800" height="480">
<param name="fps" value="80">
</applet>
Im Generated Code des Applets selbst ist
Code:
gScreen.setMaximumSize(new java.awt.Dimension(32000, 32000));
        gScreen.setMinimumSize(new java.awt.Dimension(640, 480));
        gScreen.setPreferredSize(new java.awt.Dimension(800, 480));
und die entsprechenden Layout-Befehle enthalten - trotzdem wird bei Aufruf mit 'run-file' (Shift+F6) nur ein Fenster von ca. 350x200 geöffnet. Im Browser stimmt die Fenstergröße. Woran liegt das?

- Der Mauszeiger bleibt im Applet-Bereich im Browser sichtbar (irritierend) und das Pad hängt beim aus- und eintreten des Zeigers aus dem Zeichenbereich. Wie kann ich den Zeiger verstecken und die Mausbewegung unabhängig davon erfassen, ob sich der Zeiger über dem Applet-Zeichenbereich befindet oder nicht?

- eine automatische Größenanpassung des Zeichenbereichs ans Browserfenster - wie muss ich vorgehen, um so etwas zu realisieren?

- Vollbildmodus im Browser-Modus - unterscheiden sich die einzusetzenden Methoden hier von den üblichen Vollbild-Methoden?

- durch das ständige Anfordern des Focus 'mittels focusRequest();' in der Hauptklasse gScreen wird jeglicher Focus vom Browser und selbst vom Desktop beeinträchtigt, bzw. abgezogen - wenn kein dauernder Focus-Request stattfindet, ist aber der Erfolg der Tastenabfrage für einen Neustart in Frage gestellt, vor allem beim IE6! Könnte evtl. ein expliziter Focus-Request beim Klicken auf das Applet die Sache bereinigen? Eigentlich müsste es aber funktionieren, zumindest, solange sich der Mauszeiger über dem Zeichenbereich des Applets befindet...

Ich habe jetzt keine Codes eingefügt, um die Übersichtlichkeit des Threads nicht zu beeinträchtigen. Bitte lasst mich wissen ob und wenn ja, was ihr am derzeitigen Code sehen wollt!


greetz,

milchkaffee[/quote]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Fragen zu HashMaps Spiele- und Multimedia-Programmierung 22
B Fragen zu "Physics-Body-Editor"? Spiele- und Multimedia-Programmierung 0
J Fragen zur Gui-Aktualisierung Spiele- und Multimedia-Programmierung 2
A Langtons Ameise - Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 1
D Ein paar Fragen... Spiele- und Multimedia-Programmierung 5
H LWJGL: Fragen zum Verständnis Spiele- und Multimedia-Programmierung 7
Helgon Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 17
A Klickgame ala "Harveys neue Augen" oder "Edna bricht aus" in Java programmieren... Fragen zu Kleinig Spiele- und Multimedia-Programmierung 8
Samake03 [Game]"Plumbo - Lost in Depth" Preview und Fragen Spiele- und Multimedia-Programmierung 18
G Minecraft Minecraft Fragen Spiele- und Multimedia-Programmierung 1
A Fragen zu MMO Spiele- und Multimedia-Programmierung 6
N Ein paar fragen zu JOGL Spiele- und Multimedia-Programmierung 4
M Grundsätzliche Java3D Fragen Spiele- und Multimedia-Programmierung 2
D 3 JMF Fragen Spiele- und Multimedia-Programmierung 8
M Allgemeine Fragen zu JOGL2 / OpenGL3.2 Spiele- und Multimedia-Programmierung 36
M Fragen wegen Spieleprogrammierung Spiele- und Multimedia-Programmierung 17
S glTexSubImage2D()-Fragen(Zerstörbares Terrain, OpenGL) Spiele- und Multimedia-Programmierung 3
K Game-Tutorial von Quaxli Fragen Spiele- und Multimedia-Programmierung 18
D Zwei Fragen (Exponential Fog und Schein-nach-außen-Effekt) Spiele- und Multimedia-Programmierung 6
H Einstieg erfolgreich ;), nun nur noch paar Fragen^^ Spiele- und Multimedia-Programmierung 13
V Fragen zum PositionPathInterpolator und RotationInterpolator Spiele- und Multimedia-Programmierung 2
N 4 Gewinnt fertig (Kritik, Fragen etc. erwünscht) Spiele- und Multimedia-Programmierung 29
J 3d Programmierung, Fragen: Spiele- und Multimedia-Programmierung 14
T Größeres Spiele Projekt - einige Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 3
B Euer Feedback zu meinem Code ist gefragt Spiele- und Multimedia-Programmierung 2
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
J Pong Programm Spiele- und Multimedia-Programmierung 1
T Pong Hilfe bei einer Website Spiele- und Multimedia-Programmierung 4
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
T Torquemada´s erstes Game (Pong) Spiele- und Multimedia-Programmierung 5
A Pong Grafikgestaltung Spiele- und Multimedia-Programmierung 10
R Pong -Reruns möglich machen Spiele- und Multimedia-Programmierung 2
Y Pong Spiel Score Zähler! -.- Spiele- und Multimedia-Programmierung 18
Y Ping Pong Spiele- und Multimedia-Programmierung 4
M Einfaches Ping-Pong Spiel Spiele- und Multimedia-Programmierung 3
U Pong Spiele- und Multimedia-Programmierung 7
1 Ping Pong langsam Spiele- und Multimedia-Programmierung 13
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
J ping pong ball abprallen lassen Spiele- und Multimedia-Programmierung 12
L Java Ping Pong Spiele- und Multimedia-Programmierung 1
J Tips für ein kleines Pong-Applet Spiele- und Multimedia-Programmierung 4
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
S Ping Pong: KeyListener in Paint und while Spiele- und Multimedia-Programmierung 10
W Hilfe bei Pong mit Bluej Spiele- und Multimedia-Programmierung 4
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
G Pong klon mit Steuerungsprobleme Spiele- und Multimedia-Programmierung 8
B Pong-Klon. Denkfehler bei kollisionstest Spiele- und Multimedia-Programmierung 3
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
B Ping Pong Spiele- und Multimedia-Programmierung 11
G Pong-Klon (Applet!) Spiele- und Multimedia-Programmierung 4
R Ping Pong Spiel Fehlermeldung Spiele- und Multimedia-Programmierung 12
H Performance check Pong Spiele- und Multimedia-Programmierung 19
R Ping Pong Spiel Spiele- und Multimedia-Programmierung 28

Ähnliche Java Themen

Neue Themen


Oben