![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
Hi Leute! Hab ein kleines Problem. Und zwar habe ich einen kleinen Pong Klon geschrieben, der aber das Problem hat, dass im Prinzip nicht beide Spieler gleichzeitig, sondern nur abwechselnd spielen können. Ich frage halt über den KeyListener ab, welche Taste gedrückt wurde und bewege entsprechend den richtigen Balken hoch oder runter. Wie erreicht man es, dass beide praktisch gleichzeitig, also das 2 ( oder mehr ) Tastatureingaben verarbeitet werden können? Hatte schon über Threads nachgedacht, aber ich weiss nicht so richtig, wie ich das bei meinen Klassen implementieren soll. Poste natürlich auch gern den Code, falls der nötig ist. Gruß, VipViper2000 |
|
| | Nach oben #2 |
| Gast
Beiträge: n/a
|
Hi, ich gehe davon aus, das du nur aus der Funktion keyPressed(..) deine events beziehst und dann die Balken bewegst. Klar dabei kommen Probleme rein. Versuche dir ein Array zu erstellen vom Typ boolean. jedes Feld steht für eine Taste. Denn eine taste hat zwei Zustände pressed or not pressed. So muss du halt in keyPressed(..) denn zustand der Taste auf true schalten und bei keyReleased auf false. die abfrage erfolgt entweder draüber, dass du das array public deklarierst (Schlechtes Java/ schlechte OOP) oder du lässt dir den wert aus den privaten Array von einer öffentlichen Funktion zurückgeben (halbwegs passabel) noch passabler wäre es, wenn du das Array und die öffentliche Funktion synchronized machst (Threadsafe) dann sollte alles funktionieren, wie du es dir vorstellst! mfg Soulfly |
|
| | Nach oben #3 |
| Gast
Beiträge: n/a
|
Hmm, also ich glaub du hast mein Problem nicht ganz verstanden ( oder ich versteh nicht, was du meinst Falls du genau das Problem damit lösen wolltest - sorry, aber kannste das nochmal ein wenig verständlicher erklären? Weil ich versteh nicht, warum ich ein Array erzeugen soll und die tasten dann in eine Warteschlange(?) stelle... |
|
| | Nach oben #5 |
| Gast
Beiträge: n/a
|
Ich habe nichts von einer Warteschlange gesagt also vergiss das ganz schnell wieder! So und falsch verstanden hab ich dich auch nicht. Der Clou der sachen ist, das aus den funktionen keyPressed und keyReleased die Werte des Array verändert werden, je nach dem welche Taste gedrückt oder losgelassen wurde. Dabei umgehst du das Problem, das sich dein Balken nicht mehr bewegt. (Das phänomen tritt auf, weil halt ein neuer event in Haus geschneit ist und den alten überschreibt.) Die Werte die in dem array gespeichert sind können jetzt in jedem aktualisierungszyklus von den beiden Balken abgefragt werden und diese agieren, dann je nach dem, wie die werte gesetzt sind. Und das unäbhängig davon wie viele tasten momentan gedrückt wurden. Hoffe das ist jetzt klarer. |
|
| | Nach oben #6 |
| Gast
Beiträge: n/a
|
Hab die Methode KeyPressed überschrieben und führe sie in meinem Spielfeld aus, welches ein JFrame ist. Das Spielfeld erstellt dann die beiden Spieler. Ich hatte schon überlegt die KeyEvents auf die Spieler zu übertragen, das geht aber leider nicht, weil die Spieler Klasse nur ein normales Objekt ist, also nichts von Swing oder AWT abgeleitetes...
|
|
| | Nach oben #7 |
| Gast
Beiträge: n/a
|
Überschreiben kannst du die nicht, da diese Funktionen einfach eine durch ein Interface KeyListener erzwungene leere funktion die du sowieso füllen musst. Balken können schon Objekte also Klassen sein obwohl sie keine AWT Komponenten sind. Sie können doch x und y werte speichern zum beispiel und reagieren auf das boolean-Array in der Spielfeld-klasse. Dein Spielfeld kann sich dann diese Koordinaten holen und die Balken zeichnen. Kannst mit auch den Code mal geben, dann zeige ich dir was ich meine. Hast du jetzt meinen Beitrag auch gelesen? |
|
| | Nach oben #8 |
| Gast
Beiträge: n/a
|
Hehe, da haben wir wohl gleichzeitig geschrieben. Okay, jetzt hab ich verstanden, was du meinst und klingt auch logisch. Ich werd das gleich mal testen und dann wieder berichten!! EDIT: Super!!! Danke, es hat wirklich geklappt. Und irgendwie bewegen sich die Balken jetzt auch deutlich flüssiger, wenn auch schneller. Also wenn es euch recht ist, dann poste ich mal hier meinen kompletten Code, damit ihr mir mal ein paar Tips geben könnt. |
|
| | Nach oben #12 |
| Gast
Beiträge: n/a
|
Danke für das Lob Dann werd ich das Spiel mal fertig machen - fehlt ja gar nicht mehr so viel. EDIT: So, hab jetzt auch das Zählsystem eingebaut. Nur eins fällt mir wieder negativ auf, was zwischendurch verschwunden war - der Ball ruckelt. Also er verändert irgendwie seine Geschwindigkeit. Ich steuere die Geschwindigkeit des Balles ja indem ich den Thread ( also den kompletten ) für kurze zeit schlafen lege. Irgendwie hängt das mit den Balken zusammen.... Kann mir jemand sagen, wie ich es genau mache, dass der Ball ein eigener Thread ist? Hatte schon versucht, ihn von der Klasse Thread abzuleiten und die run() zu überschreiben. Nur leider weiss ich nicht so genau wie dann weiter... :confused: Hab nochmal die aktuellen Dateien angehängt |
|
| | Nach oben #13 |
| Gast
Beiträge: n/a
|
Also bei mir gibt es das Phänomen nicht. Ist aus dem Code auch nicht ersichtlich. Vielleicht holt zu den zeitpunkten der Garbagecollector was zu knabbern, was dann die Ruckler hervoruft. Die Pause sollte aber eher in der while-Schleife selbst aufgerufen werden. Achso die Kollision funzt noch nicht richtig. Blockt obwohl kein Balken da ist. Viel spaß dabei |
|
| | Nach oben #14 |
| Gast
Beiträge: n/a
|
Also das ist komisch - auf meinem Desktop Rechner gibts dieses Ballruckeln auch nicht - auf dem meinem Lappi schon. Gut, der Lappi läuft auch nur mit 592 Mhz ( runtergetacktet ) und der Grafikchip statt mit 450 Mhz auch nur mit 100 Mhz. Vielleicht liegts daran. Das mit dem Balken ist mir auch aufgefallen, passiert aber irgendwie nicht immer. Sondern nur, wenn man den Balken, nachdem der Ball an der Wand abgeprallt ist, wegbewegt. Muss ich nochmal schauen. EDIT: Ich weiss jetzt, woran es mit den Balken lag: Ich hab bei der Abfrage, ob der Ball den Balken trifft, auch dann eine Kollision ausgelöst, wenn der Gegenspieler auf der Höhe des Balls war. Jetzt funktioniert auch das richtig |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Tastatur MAC "hoch drei" | Ben | Plauderecke | 8 | 19.10.2006 18:32 |
| Neue Tastatur für schnelleres schreiben | Corvin | Nachrichten | 12 | 03.01.2006 15:35 |
| Tastatur | Buhmann | Plauderecke | 32 | 20.08.2005 14:43 |
| Ein Wort einlesen über Tastatur und wieder ausgeben | Destiny1985 | Allgemeine Java-Programmierung | 3 | 17.12.2004 12:17 |