Kollisions Abfrage und Klassen design

Status
Nicht offen für weitere Antworten.

Templon

Bekanntes Mitglied
Hi,
Also ich habe 2 Fragen zu einem 2D Jump'n run Game. Bis jetzt habe ich den Editor zum erstellen der Maps gemacht.

1. In diesem befindet sich die Klasse "Player", in der werden zum beispiel die X und Y-Koordinaten wo ich sie gesetzt hab, Image etc. gespeichert. Nun in dem Game brauch ich diese Klasse nun auch wieder, aber mit noch mehr Funktionen wie z.B. move etc. Soll ich nun schon in der Player Klasse vom Editor die Funktion impelemtieren? Oder wie soll ich das am besten machen?

2. Wie soll ich die Kollisions Abfrage am besten implementieren? Ich habe mir überlegt, das wenn ich z.B. nach rechts drücke der Player immer einen bestimmen Zahl nach vorne lauft (z.B. 10 Pixel) und dann bevor er läuft schaut ob etwas im weg ist? Aber wie? Die Tiles haben ein Rectangle als Kollisionsmodel und der Player auch. Wie kann ich schauen ob die sich überschneiden werden? Ach ja und was sollte da alles in einem Thread ablaufen?

Grüsse Templon
 

Marco13

Top Contributor
Es ist schwierig, zu solchen Designfragen was zu sagen, wenn man das Gesamtsystem nicht kennt. Wichtig wäre z.B. zu wissen, wie stark der Editor und das Spiel gekoppelt sind. Aber eine Möglichkeit (auf Basis der wenigen Informationen) wäre, die Klasse "Player" für den Editor zu verwenden, und eine Klasse "GamePlayer extends Player" zu erstellen, die die Funktionen bereitstellt, die NUR für das Spiel benötigt werden. Das kann man dann notfalls später relativ leicht trennen oder zusammenfügen.
Die zweite Frage ist noch schwieriger. Wenn alles immer Rechtecke sind, und die Bewegung NIE so groß sein kann, dass ein Spieler z.B. mit EINEM Schritt komplett durch eine Wand laufen kann, dann könntest du einfach die "Umrisse" der Objekte als Rectangle speichern, und dann (bevor der Schritt wirklich ausgeführt wird) mit rectangle.intersects(otherRectangle) überprüfen, ob eine Kollision stattfinden wird, und dann ggf. nur einen kleineren Schritt erlauben (das könnte man dann aber evtl. auch effizienter implementieren - also sauber in einer Methode kapseln!). Die Kollisionserkennung in einem eigenen Thread zu machen wäre vermutlich sehr schwierig, und bei einem "kleinen" Spiel wohl auch nicht angemessen - das sollte der Game-Thread nebenbei erledigen.
 

Templon

Bekanntes Mitglied
Hallo, und erstmal danke für deine Hilfe :toll:

Das mit dem extenden hab ich mir auch schon gedacht, dann werde ich das mal so probieren.. Sind eigentlich schon recht stark gekoppelt also die Enemy, Tile und Player Klassen brauche ich alle, und noch ein paar andere.

In meinem Tile Objekt habe ich die Kollision gespeichrt aber noch nicht als Rectangle, aber mit den Rectangle ist das sicher eine gute Idee. Was würdest du alles in einen Thread packen? Sicher den Player und die Gegner? Und was noch?
 

Marco13

Top Contributor
Da sieht man, wie schwierig es ist, dazu etwas zu sagen: Player und Gegner können "vermutlich" in einen Thread. Aber was GIBT es denn noch, was dort rein könnte? :wink: Ich würde dich jetzt aber ungern in irgendeine falsche Richtung lenken, was das angeht. Ich habe selbst noch kein Jump&Run geschrieben.
 
G

Guest

Gast
Templon hat gesagt.:
Was würdest du alles in einen Thread packen? Sicher den Player und die Gegner? Und was noch?
Wozu? Ich kann mich nur immer wiederholen: Threads in Spielen sind meistens keine gute Idee und sollten vermieden werden, wenn es möglich ist.
 

Marco13

Top Contributor
Jetzt, wo du das sagst, fällt mir auf, dass die Frage
Was würdest du alles in einen Thread packen? Sicher den Player und die Gegner? Und was noch?
sehr mißverständlich war: Ich habe das so interpretiert, dass Player und Gegner in EINEM (gemeinsamen) Thread liegt, und NICHT in jeweils einem (eigenen) Thread. Das Problem ist bei mehren Threads eben immer die Synchronisation. Und wenn man sich die ersparen kann, sollte man das tun.
 

Templon

Bekanntes Mitglied
Was muss denn da synchronisiert werden? Bei meinem letzten Spiel (Äpfel fliegen vom Himmel runter, und man muss diese mit einem Korb einfangen :) ) ... Da war jeder Apfel ein eigener Thread, und ich hatte keine Probleme damit...
 

Marco13

Top Contributor
Es kommt immer darauf an. (Ziemlich schwammig, das ganze). Aber ohne synchronisation könnte es z.B. passieren, dass der Spieler und ein Gegner ein "fast gleichzeitig" irgendein "Power-Up-Item" schnappen - normalerweise sollte es nur EINER von beiden bekommen, und ohne synchronisation bekommen es dann evtl. BEIDE. (Wobei das noch das am-wenigsten-schlimme wäre, was passieren könnte - Exceptions bei ungünstiger Wahl der verwendeten Collections usw. könnten auch auftreten). Aber das ist nur ein abstraktes Beispiel um die möglichen Probleme zu verdeutlichen.
 

Wildcard

Top Contributor
Templon hat gesagt.:
Was muss denn da synchronisiert werden? Bei meinem letzten Spiel (Äpfel fliegen vom Himmel runter, und man muss diese mit einem Korb einfangen :) ) ... Da war jeder Apfel ein eigener Thread, und ich hatte keine Probleme damit...
Genauso kann es passieren das einer der Threads nicht mehr dran kommt und der Apfel in der Luft verhungert, oder das er viel zu schnell fällt usw.
Zusätzlich zu den Gefahren erzeugen so viele Threads auch einen Verwaltungsoverhead.
So viele Threads wie nötig, so wenige wie möglich.
 

EgonOlsen

Bekanntes Mitglied
Templon hat gesagt.:
Was muss denn da synchronisiert werden? Bei meinem letzten Spiel (Äpfel fliegen vom Himmel runter, und man muss diese mit einem Korb einfangen :) ) ... Da war jeder Apfel ein eigener Thread, und ich hatte keine Probleme damit...
Wenn die Argumente dagegen nicht einleuchten, dann probieren wir es doch mal anders herum: Was spricht denn deiner Ansicht nach dafür, das so zu machen?
 

Templon

Bekanntes Mitglied
Ja gibt eigentlich keine, ich hab gedacht es geht nur mit Threads... Falsch gedacht :p Mein Bruder hat mir auch gesagt, das ich gar keine brauche, ich könne einfach alles in einer grossen schleife machen.
 

Wildcard

Top Contributor
Du hast in aller Regel 2 Threads für diese Art Anwendungsfall:
Den Event Dispatcher Thread in dem deine GUI läuft und einen Hintergrundthread der für Bewegung zuständig ist.
 

Wildcard

Top Contributor
Der startet automatisch sobald ein Fenster aufgeht.
Falls du dich mal gefragt hast warum ein Programm wenn man ein Fenster aufmacht nicht wie üblich terminiert sobald das Ende der main erreicht ist, jetzt hast du die Antwort :wink:
 

Templon

Bekanntes Mitglied
Hehe, danke gut zu wissen :) Bin halt noch ein noob in Java .. :p Naja dann werd ich mal anfangen das ohne Threads zu lösen.. Und einfach wieder fragen wenn etwas unklar ist :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
Androbin Kollisions-Frage Spiele- und Multimedia-Programmierung 8
Androbin LWJGL - Kollisions-Bug (Fallen) Spiele- und Multimedia-Programmierung 14
Fu3L Kollisions- und Abprallverhalten BreakoutKlon Spiele- und Multimedia-Programmierung 22
FireHorses Discord JDA Nickname Abfrage Spiele- und Multimedia-Programmierung 0
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
L Abfrage-Fehler? - Hilfe bei Tetris Spiele- und Multimedia-Programmierung 9
D HitTest , Kollesions abfrage Spiele- und Multimedia-Programmierung 8
C Mastermind Treffer abfrage Spiele- und Multimedia-Programmierung 2
B Mehrere Klassen auf JFrame Spiele- und Multimedia-Programmierung 3
Arif Designproblem mit innere Klassen und Vererbung Spiele- und Multimedia-Programmierung 6
T Proplem (evtl. Klassen?) Spiele- und Multimedia-Programmierung 15
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
Y Applet für "Vier Gewinnt": Welche Klassen verwende Spiele- und Multimedia-Programmierung 10
S Welche Klassen für ein 4 Gewinnt? Spiele- und Multimedia-Programmierung 6
N Array mit verschiedenen Klassen Spiele- und Multimedia-Programmierung 15
B Java3D Klassen können trotz Installation nicht benutzt werde Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben