Wie arbeiten Strukturen wie Entity in B3D?
Übersicht

![]() |
SkabusBetreff: Wie arbeiten Strukturen wie Entity in B3D? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da ich für die Uni momentan an sowas arbeiten muss, habe ich mir mal Gedanken gemacht, wie ein
abstraktes System aussieht, das wie das Entity-System funktioniert. Irgendwie komme ich aber zu keinen "richtigen" Ansatz.Wäre toll, wenn ihr mir ein paar Tipps geben könntet. Angenommen man will das Entity-System aus Blitz3D mit Klassen in C# realisieren. Wie würde man da vorgehen? Welches System von Vererbung/Containments etc. würde sich anbieten, damit das System z.B. solche Konstrukte erkennt: Code: [AUSKLAPPEN] Entity ent; ent = LoadMesh("file.3ds"); Sprich also: Eine abstrakte Oberklasse erkennt selbstständig welche "Spezialisierungen" es erfahren soll. Vererbung ist dahingehend theoretisch ungeeignet, da die Entity-Klasse ja übergeordnet ist(also parent) aber ja keine Unterfunktionen wie Mesh-Parameter enthält. Habt ihr da Ideen wie man so ein Problem ansatzweise lösen kann? MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach doch da gibt es schon mesh-spezifisches. zB ein Array mit allen Surfaces. | ||
![]() |
ComNikBetreff: Re: Wie arbeiten Strukturen wie Entity in B3D? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Skabus hat Folgendes geschrieben: Sprich also: Eine abstrakte Oberklasse erkennt selbstständig welche "Spezialisierungen" es erfahren soll. Wenn ich dich richtig verstehe könnte man das elegant und einfach mit einem Komponenten Basierten System lösen. Allerdings weiss ich nicht wie B3D das macht. Zum Komponenten Gedöns: Vorx Engine Worklog Du hast eine Basisklasse (wäre eben Entity) und mehrere von TComponent abgeleitete Komponenten Klassen (wie zb CMesh oder so). Und dann baut mann sich aus beliebig vielen Komponenten das Entity das man haben will. In der Vorx.Engine funktioniert das z.B so: Code: [AUSKLAPPEN] entity:TEntity = TEntity.Create(...) entity.AddComponent(TCPhysics.Create(...)) entity.AddComponent(TCPlayer.Create(...)) Ich hoffe das ist was du meinst. Einziger Nachteil bei dieser Methode: Inter-Komponenten Kommunikation. Allerdings sollten Komponenten eh weitestgehend unabhängig sein. Ich nutze allerdings sogenannte Sub Systems, die einfach alle existierenden Instanzen einer Komponente (z.B die Physik Komponente) speicher, unabhängig davon, welchem Entity die Instanz "gehört". Damit spart man sich das ständige entity.GetComponent() was durch die String Keys in einer Map vielleicht nicht ganz soo schnell wäre. Auch wenn ich da noch keine Experimente gemacht habe. Alternativ könntest du ein System benutzen wie es die MaxGUI meines Wissens nach tut. Du hast ein Basis Type "TGadget" das einfach alles mitbringt, was es für die Unterklassen benötigt. Das ist aber weder effizient, noch elegant ![]() lg ComNik |
||
WIP: Vorx.Engine |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
LoadMesh liefert ein Entity zurück, nicht die Meshklasse selbst ![]() Alle Objekte, mit denen du in B3D hantierst, sind Entities - auf etwas anderes hast du gar nicht Zugriff. Ein Entity besitzt immer ein Mesh (wichtig: es besitzt ein Mesh, aber es ist kein Mesh -> Es besitzt einen Mesh-Member und ist nicht abgeleitet von Mesh), das je nach dem spezialisiert sein kann (Terrain/Sprite). In C++ könnte das also so aussehen Code: [AUSKLAPPEN] class Entity {
AbstractMesh mesh; Vec3 position; Matrix rotation; //etc. etc. etc. }; class AbstractMesh { int meshType; //Sprite, Terrain, Polygon, .... //etc. etc. }; class Sprite : AbstractMesh { //etc. etc. }; class Terrain : AbstractMesh { //etc. etc. }; class Polygon : AbstractMesh { int vertexCount; int triangleCount; //etc. etc. }; |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, klasse, danke ![]() Wiedermal son Fall von "eigentlich hätte man selbst drauf kommen können!" Hilft mir auf jeden Fall bei meinem Problem weiter! MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group