Portal > Foren > Java > Desktop-Applikationen und Grafik > Gleichzeitige Tastatur-Eingaben
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 29.06.2005, 16:24 Nach oben    #1
VipViper2000
Gast
 
Beiträge: n/a
Standard Gleichzeitige Tastatur-Eingaben

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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.06.2005, 18:20 Nach oben    #2
Soulfly
Gast
 
Beiträge: n/a
Standard

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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.06.2005, 21:00 Nach oben    #3
VipViper2000
Gast
 
Beiträge: n/a
Standard

Hmm, also ich glaub du hast mein Problem nicht ganz verstanden ( oder ich versteh nicht, was du meinst ). Die Balken lassen sich wunderbar bewegen, auch wenn ich die Taste für Balken hoch gedrückt halte usw. Das Problem ist: Wenn ich meinen Balken durch gedrückthalten hoch bewege und der andere Spieler dann hoch oder runter drückt, bleibt mein Balken stehen und seiner läuft. Wenn ich dann wieder hoch oder runter drücke läuft halt meiner weiter.

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...
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 09:26 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 559
Standard

Wo führst du den die Methode aus? keyPressed oder keyReleased?
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 10:55 Nach oben    #5
Soulfly
Gast
 
Beiträge: n/a
Standard

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.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 10:56 Nach oben    #6
VipViper2000
Gast
 
Beiträge: n/a
Standard

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...
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 11:05 Nach oben    #7
Soulfly
Gast
 
Beiträge: n/a
Standard

Ü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?
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 12:27 Nach oben    #8
VipViper2000
Gast
 
Beiträge: n/a
Standard

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.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 12:59 Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 559
Standard

Wenn er zu groß ist häng in lieber als Anhang an ...
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 13:06 Nach oben    #10
VipViper2000
Gast
 
Beiträge: n/a
Standard

Alles klar, dann hier mal meine Dateien. Halt einfach mit StartPong ausführen dann...
Angehängte Dateien
Dateityp: zip Pong.zip (3,0 KB, 5x aufgerufen)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2005, 23:21 Nach oben    #11
Soulfly
Gast
 
Beiträge: n/a
Standard

SO sieht alles sehr gut aus.
Alles schön auf die Objekte verteilt und ein guter code-stil.
Solltest für später vielleicht ein bißchen mehr kommentieren.

mfg Soulfly
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2005, 00:22 Nach oben    #12
VipViper2000
Gast
 
Beiträge: n/a
Standard

Danke für das Lob . Ja, das mit dem Kommentieren mache ich irgendwie immer erst, wenn die Methoden am Ende so funktionieren, wie sie sollen - ist irgendwie eine Macke von mir...
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
Angehängte Dateien
Dateityp: zip Pong.zip (3,4 KB, 3x aufgerufen)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2005, 03:34 Nach oben    #13
Soulfly
Gast
 
Beiträge: n/a
Standard

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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2005, 11:37 Nach oben    #14
VipViper2000
Gast
 
Beiträge: n/a
Standard

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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ä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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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