Hilfe bei Entities benötigt

Lukas1995

Mitglied
Hallo :)

Wie der Titel schon sagt, brauche ich ein bißchen Hilfe beim Verständnis von Entities.

Ich benutze Slick 2D als Engine, ich komme auch ganz gut vorran, doch ich komme jetzt langsam an einen Punkt, wo Code sich wiederholt und alles zu unübersichtlich wird. Da bin ich auf Entities gestoßen.

Eine Einleitung habe ich hier bekommen: entity_tutorial [Slick Wiki]

Daraus habe ich es so verstanden, dass es nur die Klasse Entity gibt, die eine Liste von Komponenten hält, die jeweils alle spezielle Verhalten beschreiben, wie dort zum Beispiel die Bewegung. Das heißt im Endeffekt, dass ich dann am Ende mit einem riesigen Konstruktor darstehe für zum Beispiel einen Gegner, der z.B. laufen, springen, schießen kann und eventuell noch fröhlich mit Bananen um sich wirft... nur so als Beispiel :D

Für mich als Gegensatz hab ich noch dieses gefunden: Coke and Code

Da sieht das für mich widerrum so aus, als liefe das wieder auf das Klassensystem heraus, dass ich im Moment schon habe, dass heißt ich hab eine Basisklasse, leite davon alles ab und hab am Ende wieder viel Code 2 mal getippt.

Oder sind das beides zwei unterschiedliche Sachen mit dem selben Namen ?
 

Fu3L

Top Contributor
Diese Lektüre hat mir da selbst sehr geholfen:
T=Machine Entity Systems are the future of MMOG development – Part 1

Du brauchst im Prinzip nicht mal eine Klasse Entity. Sondern nur eine Map<Integer, Map<Class<? extends Component>, Component>> der du alle Komponenten hinzufügst. Dann gibt es die EntitySysteme, die zum Beispiel jedem Entity mit der Component "Moveable" um seinen in dieser Component gespeicherten Geschwindigkeitswert verschiebt, wenn denn eine Anweisung zur Bewegung vorliegt. (Zum Beispiel durch den Nutzer oder die KI).
Lies am besten den Artikel, der sich zwar sehr auf MMOGs bezieht, aber auch in jedem anderen Spiel so genutzt werden kann.

Dieser Artikel erklärt es auch noch einmal deutlich, etwas kürzer und auch bezogen auf ein Singleplayer game: Cowboy Programming » Evolve Your Hierarchy (Der Autor hat an den Tony Hawk Spielen mitgearbeitet)
 

Lukas1995

Mitglied
Wow, das ist eine ganze Menge.

Das scheint dann doch ein relativ komplexes Thema zu sein, ich werd mal sehen ob mir das liegt :)

Danke an dich Fu3l, das hat mir dann doch sehr weitergeholfen :)
 

Lukas1995

Mitglied
Ach, eine Frage hat sich dann doch noch aufgeworfen:

Nach dem Artikel Cowboy Programming » Evolve Your Hierarchy habe ich mich gefragt, ob die Klassen in dem "Komponentendiagramm" (Figure 2) so eine Art Container für Komponenten sind oder einfach nur... Beschreibungen für bestimmte Komponenten in dem Fall sind.

Das mit dem Container meine ich so:

Es gibt z.B. die Klasse Alien. Die Klasse Alien hat eine update- und render -Methode, sowie die Komponenten oder Objekte Position, Movement, Render etc, die dann bei jedem aufruf ihre Methoden machen.

Beschreibungen:

man erstellt für Alien ein Entity-Objekt und gibt diesem dann die Komponenten dazu. -> endet leider in einem großen Konstruktor und evtl viele Überprüfungen auf Null-Referenzen.

Oder ist das ganz anders gemeint ?
 

Fu3L

Top Contributor
Das ist das schwierige an einem EntitySystem, es hat (fast) nichts mehr mit OOP zu tun! Das ist schwierig und ich bin mir desssen bewusst, weil ich vor einigen Monaten selbst erst gelernt habe, was das bedeutet.

Es gibt keine Klasse Alien. Es gibt keine Klasse Enemy. Es gibt keine Klasse Player.
Jedes Entity wird zu dem was es ist, durch die Gesamtheit seiner Komponenten. Ein Beispiel: Wenn ich in einem MMORPG eine schwere Rüstung anlege, identifieziert man mich als Tank, wenn ich mir einen Zauberstab und entsprechende Skills zulege, werde ich als Magier identifiziert, auch ohne, dass ich irgendwo diese Rolle konkret gewählt hätte.

Jedes Entity ist erstmal eine Nummer und dieser Nummer werden die Komponenten zugewiesen. Am besten in einer Art Factory Methode. Also sowas wie createTank() und in dieser werden dann Componenten wie Moveable, Armored, und, und, und hinzugefügt. Kein Bedarf für NP Checks ;)
Im nächsten Schritt könnte man dadurch sogar weitergehen und die Konstruktionsanweisungen für Einheiten leicht aus Datenbanken auslesen. Generell kann man so seeeehr leicht die Objekte speichern (was ja sehr betont wird in den Artikeln): Ich brauche keine Methode zum Speichern pro Einheit, sondern nur pro Komponente. Dadurch kann ich eine neue Einheit als einzigartige Zusammenstellung von Komponenten kreieren, ohne auch nur eine Methode für das Speichern, Laden und auch Rendern zu schreiben.
Du brauchst keine eigene Rendermethode mehr. Das ist auch eher eine Vereinfachung aus Quaxlies Tutorial und eher unüblich in Engines. Du hast eine Komponente, die anzeigt, dass dein Entity eine Darstellung hat und wenns zB ein Bild oder ein 3D-Modell ist, dann sollte diese Komponente eine eindeutige Identifizierung dieser Darstellung erlauben.
Dann erstellt man ein neues EntitySystem "Renderer" und dieses lädt dann für jedes Entity die Darstellung. Wenn es sieht: Ohh, Entity 10, dann guckt es in einer Map nach und sieht, dass dafür BildXY hinterlegt ist und zeichnet dieses. Natürlich können zB bei Vergiftungserscheinungen noch Komponenten hinzugefügt werden, wie "Greenish" und dann wird das Bild beim Rendern vom Renderer grünlich eingefärbt.

Diese Art der Einheitenverwaltung ist erstmal sehr nützlich, falls man das Parallelisieren möchte, denn jedes System ist unabhängig von den anderen und erst nach einem Durchlauf werden Änderungen an den Komponenten in die Datenbank gespeichert und beim nächsten Durchlauf wieder ausgelesen. Das können wir uns, wenn wir in einem Prozess und vllt auch in einem Thread arbeiten, sparen. Dadurch können wir Annahmen machen und uns zB merken, welche Entities neu in den Kreis der Entities mit zB einer Darstellung aufgenommen wurden. So muss der Renderer nicht jedes Mal alle Entities darauf untersuchen. (Wenn du mit einer Engine, die einen SceneGraph bereit hält, arbeitest, sollte der Renderer sowieso nur dafür verantwortlich sein, die Darstellungen an diesen an- und abzuhängen und dann auch anders heißen, weil dann ein anderer Teil der Engine fürs Zeichnen zuständig ist.)

Ich werde mal mein EntitiySystem etwas kommentieren und sehen, ob ichs mal hochladen kann ;)
 
Zuletzt bearbeitet:

Lukas1995

Mitglied
Klingt nach einiger Arbeit in der Umgewöhnung, nachdem mir beigebracht wurde, so objektorientiert zu denken :D

Das wär klasse, wenn du das mal hochladen könntest, würde ich mir dann auf jeden Fall mal anschauen!
Danke dass du dir Zeit nimmst, mir zu helfen :)
 

Fu3L

Top Contributor
Nachdem ich wenig Zeit hatte, möchte ich meine Ankündigung wahr machen und das EntitySysem hochladen. Ich hab nicht mehr wirklich aufgeräumt. Ich hoffe dennoch, dass man daraus Rückschlüsse für sein eigenes EntitySystem ziehen kann.
In der obersten Ebene des Ordners liegt "ModelSystem.java", die beispielhaft den möglichen Aufbau eines Systems zeigt (habe ich einfach unverändert aus meinem Spiel kopiert). Des Weiteren habe ich den "ClientSynchronizer" dringelassen, den ich in meinem Spiel verwende, der müsste aber für eine allgemeine Verwendung einiges verändert werden. Es mag auch sein, dass er ineffizient arbeitet, das hab ich relativ schnell geschrieben ;)
Wenn noch weiteres Interesse an dem Thema beteht, könnte ich noch einen Thread aus dem JMonkey Forum suchen, in dem darüber diskutiert wurde.
PS: Einen Hinweis noch, den ich in meinem langen Text vergaß: Components sind Immutable, das heißt, sie werden nie verändert! Wenn man einem Entity eine andere Darstellung geben will, muss man die Komponente austauschen. Außerdem trägt die Komponente höchstens Informationen wie: "Model xY". Das Modell an sich, muss vom Renderer geladen werden, weil Komponenten so wie sie sind speicherbar sein müssen und wir wollen ja nicht immer das Modell mit abspeichern, sondern nur die Information welches Modell das entsprechende Entity nutzt.
 

Anhänge

  • entitySystem.zip
    9,4 KB · Aufrufe: 7
Ähnliche Java Themen
  Titel Forum Antworten Datum
Atten007 Minecraft Hilfe bei benutzerdefinierten Bannervorlagen in MCreator benötigt Spiele- und Multimedia-Programmierung 0
R Flappy Bird Hilfe Spiele- und Multimedia-Programmierung 1
Atten007 Minecraft Hilfe bei der Fehlerbehebung in MCreator benötigt Spiele- und Multimedia-Programmierung 1
Atten007 Minecraft Hilfe beim MCreator Plugin benötigt Spiele- und Multimedia-Programmierung 0
Atten007 Minecraft Hilfe beim MCreator Plugin benötigt Spiele- und Multimedia-Programmierung 5
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
J TreeNode erstellen [Hilfe beim Konstruktor, Zeile 16] Spiele- und Multimedia-Programmierung 2
Z Minecraft Hilfe bei Minecraft PvP Client Spiele- und Multimedia-Programmierung 21
T Hilfe beim Platzieren der Schiffe Spiele- und Multimedia-Programmierung 14
M Brauche Hilfe was zu Programmieren Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
RalleYTN Brauche Hilfe beim Einlesen von PNGs Spiele- und Multimedia-Programmierung 14
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
T Pong Hilfe bei einer Website Spiele- und Multimedia-Programmierung 4
T Hilfe bei decompilen von Plugin Spiele- und Multimedia-Programmierung 6
E Brauche Hilfe was soll ich tun Spiele- und Multimedia-Programmierung 7
B HILFE bei Spieleprogrammierung mit Slick2D Spiele- und Multimedia-Programmierung 9
S Würfelspiel; Hilfe Spiele- und Multimedia-Programmierung 3
M Hilfe bei vier gewinnt Spiele- und Multimedia-Programmierung 4
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
C Visual Story programieren/hilfe Spiele- und Multimedia-Programmierung 5
L Hilfe: Moog VCF Diskretisierungs Algorithmen (Smith/Stilson u.A.) Spiele- und Multimedia-Programmierung 0
J Spielfiguren laufen lassen auf einer html Tabelle mit Hilfe von Servlets Spiele- und Multimedia-Programmierung 2
M Hilfe bei Snake Spiele- und Multimedia-Programmierung 4
T Hintergrundmusik eines Spiels mit Hilfe von JLayer Spiele- und Multimedia-Programmierung 12
S 2D mit Slick - Anfänger sucht Hilfe Spiele- und Multimedia-Programmierung 4
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
J Hilfe bei Fußballmanager Spiele- und Multimedia-Programmierung 0
C Hilfe bei einem Mosaikspiel Spiele- und Multimedia-Programmierung 16
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
E Hilfe bei Labyrinth Programmierung. Spiele- und Multimedia-Programmierung 9
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
T Aim-Hilfe Spiele- und Multimedia-Programmierung 4
S Shiritori / word chain / Wörterkette Hilfe Spiele- und Multimedia-Programmierung 1
J Hilfe bei mastermind dringend !!!!! Spiele- und Multimedia-Programmierung 3
S Hilfe bei Spielumsetzung Spiele- und Multimedia-Programmierung 6
M Kleines Spongebobspiel / Hilfe gesucht Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
A Minecraft Hilfe bei Minecraft Mod Spiele- und Multimedia-Programmierung 1
F Einen Sound mit veränderter Tonhöhe und Geschwindigkeit abspielen - Hilfe erbeten Spiele- und Multimedia-Programmierung 29
V Keine Ahnung von OpenGL! Hilfe wäre lieb! Spiele- und Multimedia-Programmierung 8
L Minecraft Minecraft Bukkit Plugin hilfe Spiele- und Multimedia-Programmierung 9
E Hilfe bei Highscore programmierung Spiele- und Multimedia-Programmierung 3
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
R Hilfe bei Snake-Programmierung Spiele- und Multimedia-Programmierung 6
B Hilfe bei Minecraft Plugin Spiele- und Multimedia-Programmierung 3
C Java Brauche Hilfe Spiele- und Multimedia-Programmierung 5
M Hilfe bei Spiel Programmierung Spiele- und Multimedia-Programmierung 4
B Hilfe bei GameGrid Spiele- und Multimedia-Programmierung 11
J Spiel mit Java SWING, LWJGL und JMonkey [Anfänger braucht Hilfe] Spiele- und Multimedia-Programmierung 10
N Hilfe bei Tower Defense Spiele- und Multimedia-Programmierung 22
R hilfe bei 2DSpiel. Spiele- und Multimedia-Programmierung 3
S AirHockey Kollisionsprobleme, bitte um Hilfe Spiele- und Multimedia-Programmierung 2
L Abfrage-Fehler? - Hilfe bei Tetris Spiele- und Multimedia-Programmierung 9
R Hilfe bei Reversi/Othello Spiele- und Multimedia-Programmierung 6
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
B Hilfe bekomme den IF befehl nicht hin Spiele- und Multimedia-Programmierung 10
C RFID Überwachung - Hilfe Spiele- und Multimedia-Programmierung 3
javajavajava Java Lotto Zahl 6 aus 49 - Brauche Hilfe Spiele- und Multimedia-Programmierung 3
radiac FullScreenExlusiveMode HILFE!!! Spiele- und Multimedia-Programmierung 6
E TetrisApplet Thread Hilfe Spiele- und Multimedia-Programmierung 6
H PingPong HILFE !!! Spiele- und Multimedia-Programmierung 3
G GO-Spiel in Java noch fehlerhaft hoffe um hilfe Spiele- und Multimedia-Programmierung 7
N Brauche Hilfe bei kleinem Spiel Spiele- und Multimedia-Programmierung 40
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
L Brauche hilfe mit KeyEvent Spiele- und Multimedia-Programmierung 4
B brauche hilfe bei der tastenzuodnung Spiele- und Multimedia-Programmierung 3
E Hilfe bei einer GUI Programmierung mit Graph Spiele- und Multimedia-Programmierung 30
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
W Hilfe bei Pong mit Bluej Spiele- und Multimedia-Programmierung 4
A Hilfe bei der Methode COLOR (Java) Spiele- und Multimedia-Programmierung 10
S Hilfe: Ich sehe durch die ganze Api's nicht mehr durch! Spiele- und Multimedia-Programmierung 15
N Hilfe bei snake Spiele- und Multimedia-Programmierung 37
C Hilfe bei einfachen Game Spiele- und Multimedia-Programmierung 15
T Bitte um Hilfe bei Animationen Spiele- und Multimedia-Programmierung 10
G Fragespiel, Hilfe ! like Wer wird Millinär Spiele- und Multimedia-Programmierung 12
D Hilfe mit mini-spiel für die Schule. Spiele- und Multimedia-Programmierung 1
F Brauche Hilfe bei Bewegung eines Rechtecks [Applet] Spiele- und Multimedia-Programmierung 5
G Hilfe bei 3Gewinnt! Spiele- und Multimedia-Programmierung 2
C anfänger braucht hilfe für info unterricht Spiele- und Multimedia-Programmierung 21
A Hilfe bei Programmierung von Abalone Spiele- und Multimedia-Programmierung 6
S Hilfe bei Galgenmännchen Spiele- und Multimedia-Programmierung 4
M 'Mensch ärgere Dich nicht' - Hilfe! Spiele- und Multimedia-Programmierung 12
K Hilfe bei Grafikeinbindung in einem Spiel Spiele- und Multimedia-Programmierung 6
H Ich benötige Hilfe [Noob] Spiele- und Multimedia-Programmierung 9
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3
C Minecraft Spigot Entities 1.8 Spiele- und Multimedia-Programmierung 2
R Denkanstoss benötigt Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben