PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Probleme bei der Bewegungsdarstellung (2D-Spiel)


RattuS
2011-01-08, 20:40:00
Hallo,

ich baue fürs Studium derzeit ein kleines 2D-Spiel (Vertical Scroll Shooter), bei dem ich auf folgende Probleme gestoßen bin:

Ich habe ein Spielobjekt (70x100), dessen Sprite ich als Image (PNG mit Transparenz) zeichne. Über die Tastatur lässt sich das Spielobjekt bewegen (oben, unten, links, rechts).

Problem 1: Die Schrittweite der Bewegung (Offset, das ich auf die aktuellen Koordinaten addiere/subtrahiere) sieht bei geringer Differenz zwar weich aus, ist in seiner Geschwindigkeit dadurch aber logischerweise langsam. Eine höhere Differenz bewirkt zwar eine schnellere Bewegung, sieht aber "eckig" aus. Was kann man da machen?
Gelöst.

Problem 2: Im Zusammenhang mit der Bewegung bereitet mir der KeyListener auch noch Probleme, verarbeitet wird nämlich immer nur ein Tastendruck. Wenn ich z.B. OBEN und RECHTS gleichzeitig drücke (diagonale Bewegung), bewegt er sich nur in eine Richtung. Ich müsste diesen Tastendruck irgendwie abwechseln verarbeiten lassen oder?
Gelöst.

Problem 3: Wahrscheinlich bedingt durch Problem 2 entsteht beim Tastendruck eine Art "Beschleunigungsphase", wenn ich die Taste gedrückt halte. D.h. ich drücke die Taste (sofortige Bewegung) und bekomme erst nach spürbarer Zeit (vielleicht 500 ms?) die zweite und alle darauffolgenden Bewegungen. Wohl ein Problem des Tastendrucks oder?
Gelöst.

(Problem 4): Was kann ich allgemein für eine bessere Leistung tun? Ich zeichne derzeit das HUD mit Text-Anti-Aliasing (große Leistungseinbuße?) über drawString und den Rest via drawImage (Spielobjekte und Hintergrund). Das Weglassen des Hintergrundes steigert die Leistung erheblich (selbsterklärend), aber ich möchte darauf ungern verzichten. :(
Gelöst.

Fragen über Fragen und dann auch noch diese als .NET verwöhnte Göre natürliche Abneigung gegenüber Java. Danke schon mal für eure Antworten!

Gohan
2011-01-08, 22:59:55
Zur Tastaureingabe empfehle ich dir dies von Coke and Code:

http://www.cokeandcode.com/info/showsrc/showsrc.php?src=../spaceinvaders103/org/newdawn/spaceinvaders/util/Keyboard.java

RattuS
2011-01-09, 00:08:22
Problem 2 gelöst: Eine Liste mit allen derzeit gedrückten Tasten im Hintergrund halten, macht Sinn und ist leicht zu implementieren. Top! :up:

Problem 3 gelöst: Die verzögerte Bewegung entsteht dadurch, dass ich das Neuzeichnen bisher noch im keyPressed-Event mache, weil ich noch kein GameUpdate-Tick implementiert habe. Und der keyPressed-Event ist natürlich abhängig von der Tastenanschlagsgeschwindigkeit (schönes Wort), die im System eingestellt ist. :rolleyes:

Problem 1 und Problem 4 gelöst: Das lag alles nur am Update-Event, den ich übergangsweise verwendet hatte. Jetzt habe ich einen ordentlichen GameUpdate-Ticker, der die Darstellung gewünscht weich aussehen lässt und erstaunlicherweise auch auf meiner langsameren Maschine schnell arbeitet. :)