Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.08.2013, 13:49

Entity System via C++ Struct

Ich bin recht neu in C++ und möchte ein Entity System bauen für Sprites.
Ergo soll das struct alle angaben über proportionen, positionen, textur, etc. beinhalten.

Das bekomme ich noch hin, jedoch wenn ich bspw. eine funktion namens LoadSprite(pfad,x,y) bauen würde, wie muss ich ich das in c++ handhaben, da ja für jedes sprite bzw. dessen struct handle extra speicher zur verfügung stehen muss.

ich möchte später in einer seperaten funktion alle generierten sprites durchlaufen um diese rendern zu können(also an die device schicken).

ich kenn mich damit noch nicht wirklich aus und wäre für jedes codeschnippselchen oder jeden denkanstoss dankbar.

p.s.das ganze dx9 zeugs kapier ich soweit, mir gehts nur um das handling des struct um mehrere sprite structs in einem rutsch an die device schicken zu können.

2

21.08.2013, 14:08

Ich blicke jetzt nicht so ganz durch, was du willst.
'ne Struktur ist nichts anderes als eine Klasse, nur dass da die Objekte standardmäßig public statt private sind. Einfach genauso handhaben. (Falls hier Verwirrung herrscht)
Pack alle Sprites in einen Container, den du dann durchläufst und die einzelnen Objekte schließlich an das Device schickst.
Es wird nicht ganz klar, zumindest für mich, wo das Problem ist.

MfG
Check

3

21.08.2013, 14:10

Zitat

Pack alle Sprites in einen Container, den du dann durchläufst und die einzelnen Objekte schließlich an das Device schickst.

Es wird nicht ganz klar, zumindest für mich, wo das Problem ist.
wie würde das in c++ code aussehen?
vielleicht hab ich hier auch einfach auch nur einen denkfehler.

4

21.08.2013, 15:29

Hast du mal was "an das Device geschickt"?
Scheinbar nicht. Da fehlt mir das Wissen in DirectX, um da zu helfen.
Der Containerkram sollte eigentlich auch klar sein, aber naja... Mal den std::vector-Container als Beispiel genommen, Doppelpunkt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
std::vector<meineBeispielStruktur> container; 
container.push_back(meinBeispielObjekt); //Hinzufügen der Objekte
for(unsigned int i=0; i<container.size(); ++i) //Zugriff auf die Objekte
    container[i].BeispielFunktion();

for(std::vector<meineBeispielStruktur>::iterator it=container.begin(); it!=container.end(); ) //Sicheres löschen bestimmter Objekte
    if(it->meinObjektAusMeinerBeispielStruktur)
        it = container.erase(it);
    else
        ++it;

Fertiglösungen sind nicht gern gesehen, falls du das suchen solltest. (was so wirkt)

MfG
Check

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

21.08.2013, 18:42

Du brauchst erstmal kein "Entity-System" wenn du sowieso am Ende nur Sprites hast.
Desweiteren lös das lieber mit einer Klasse, bestimmte Dinge bei einem Sprite müssen und sollten besser nicht public sein.

Zitat

Das bekomme ich noch hin, jedoch wenn ich bspw. eine funktion namens LoadSprite(pfad,x,y) bauen würde, wie muss ich ich das in c++ handhaben, da ja für jedes sprite bzw. dessen struct handle extra speicher zur verfügung stehen muss.

Etwas schwer zu verstehen, aber so wie ich es verstanden habe möchtest du für jedes Sprite eine Textur laden können. Speichern wirst du die Textur am besten als Membervariable in der Klasse, oder mit einem Zeiger auf eine seperate Klasse die die Textur speichert. Dann können sich mehrere Sprites eine Textur teilen. Dazu schreibst du noch in die Sprite Klasse oder in die Textur Klasse eine Methode die eben die Textur läd, je nachdem welche Variante du wählst.

Also quasi:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class Texture{
whatevertype textureData;

void loadTexture(String path);
};

class Sprite{
Texture texture;

Sprite(Texture texture){
this.texture = texture;
}
};

6

21.08.2013, 21:47

Insgesamt würde ich dir aber eher zu einer Klasse als einer Struktur raten, da du vllt. im späteren Verlauf deines Projektes noch AI oder Physics zu deiner Entity hinzufügen möchtest, wobei eine Struktur evtl. etwas ungeschickt ist.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

7

21.08.2013, 22:14

warum sollte dort eine struct ungeschickt sein?

8

21.08.2013, 22:22

Eine struct ist nicht unbedingt dazu da, Methoden oder Container wie Maps für Komponenten, etc. zu enthalten, oder? Natürlich könnte man, aber ich würde da auf jeden Fall eine Klasse anlegen.

9

21.08.2013, 22:34

Ich rieche schon den Flamewar.
Es ist Jacke wie Hose. Es gibt Konformen auf die man sich "geeinigt" hat, aber die kann man gut ignorieren, wenn man will.
Bei mir entscheidet sich das immer mit der Frage: Wie viele Elemente sind private oder protected? Wie viele Elemente sind public?
Wenn Public > Private + Protected => struct
Wenn Public < Private + Protected => class
Wenn Public == Private+Protected => class
Das ist so meine Beantwortung auf die Frage. Es ist halt einfach ein subjektives Ding, also brauch man da eigentlich auch nichts groß "empfehlen". (es sei denn man legt Wert darauf, dass man sich ein Keyword spart! :crazy: )

MfG
Check

10

21.08.2013, 22:47

Hast ja recht. Nochmal zu nubis Frage: Ich würde wie DeKugelschieber auch die Texture etc. drumherumbauen, und die Struktur / Klasse dann lediglich diese Objekte enthalten lassen. Das wäre glaube ich die beste Lösung, sofern du keine Komponenten brauchst.

Werbeanzeige