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

12.03.2009, 13:19

Strukturierungsproblem

Also ich hab eine DirectX und eine Sprite Klasse. Allerdings wird ja das Device in der Sprite Klasse benötigt. Dieses lasse ich momentan über eine Funktion übergeben, allerdings gefällt mir das nicht so ganz. Ich denke mal viele hier haben dieses Problem schonmal gehabt und wollte mal fragen wie ihr das gelöst habt, weil ich denk schon seit Tagen drüber nach, aber mir ist immer noch keine bessere Lösung eingefallen. Danke schonmal für die Hilfe.

EDIT: Hatte ich noch vergessen zu erwähnen, ich lass eine andere Klasse von der DirectX Klasse erben und übergebe das Device dann in dieser Klasse an eine Sprite Instanz. Irgendwie eine blöde Lösung...

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

12.03.2009, 13:22

übergib dem zeiger auf das Device im Konstruktor und speicher dir den Zeiger als Membervariable.

3

12.03.2009, 13:24

Das ist doch das gleiche als wenn ich es an eine Funktion übergebe, nur das es eher passiert.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

12.03.2009, 13:48

nein nicht ganz: durch den konstruktor verhinderst du das merfache setzen des Grafikdevice für das konkrete objekt.
höchstens die dirty version: deine directX-klasse singleton machen dann sparste dir übergeben. andere wege gibt es nicht.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

12.03.2009, 14:19

Ich seh da auch nur den Singleton und den "Übergabe im Konstruktor" Weg. Je nachdem wie "liberal" du das Zeichnen handhaben willst (soll man auch an der Library "vorbeizeichnen" können?) würde ich den Singleton oder den Übergabeweg gehen.

6

12.03.2009, 16:01

Also das Problem mit den Singletons ist ja, dass von der DirectX Klasse geerbt wird (Wegen der FrameFunc) und diese Klasse dann nicht in der DLL bekannt ist. Okay, ich gebe mich dann geschlagen, werde es dann jetzt so machen, dass ich es per Konstruktor übergeben lasse, dann sehen auch die anderen Funktionen sauberer und einfacher aus. ;)

Trotzdem Danke für die Hilfe.

Falls hier irgendein Crack doch noch eine Lösung hat, wäre ich trotzdem sehr daran interessiert. ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

12.03.2009, 16:27

Ich kenn dein Design nicht, deshalb ist es schwer was konkretes vorzuschlagen. Aber, falls du aus deiner Spriteklasse, tatsächlich direkten Zugriff auf das Device brauchst würde ich den Zeiger tatsächlich im Konstruktor übergeben. Letzteren kannst du ja schützen und die Spriteinstanz aus deinem Device (oder ähnliches, je nachdem was du hast) heraus erzeugen.

Anonymous

unregistriert

8

12.03.2009, 22:07

Ohje, wie hier wieder mit Singletons rumgeworfen wird... Warum soll man nur 1 Device haben können? Ist doch Nonsens.

2 Klassen:
device - deine device-klasse
sprite - deine sprite klasse

der c'tor der sprite-klasse ist private und die klasse hat eine freundschaft zur device-klasse. die device-klasse hat eine funktion "create_sprite", welche das sprite erstellt. die funktion kann auf den c'tor von sprite dank friend zugreifen. ein sprite hat keine draw-methode, sondern nur das device. ein sprite kann sich nicht selbst zeichnen, da es nur eine ansammlung von daten ist und kein akteur.

drum:
device->draw (sprite);

das device kann auch hier wieder dank friend auf alle attribute/methoden auf sprite zugreifen. vorteil an dieser variante: da device die sprites erstellt, kann es auch einen zeiger auf diese sichern und ggf. für einen restore verwenden. also praktisch "events" an alle sprites senden.

so die einfache variante. ich würde jedoch eher mit content-jobs, managern und tasks an die sache gehen, doch das würde glaube ich gerade alles sprengen ;)

9

12.03.2009, 22:23

Jo vielen Dank! Content-Jobs und Tasks sagen mir noch nicht viel, aber das lässt sich ja immer noch ändern, sobald ich vorhabe meine Engine zu optimieren. ;)

Anonymous

unregistriert

10

12.03.2009, 22:40

sowas kann man nicht einfach "nachrüsten" oder "nachoptimieren", da dies das fundament darstellt.

Werbeanzeige