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

21

20.02.2010, 15:36

Ich glaube, bei CBenni::O sind die Ressourcenklassen durch SFML schon gegeben. Und ich sehe auch nicht ganz, wann man eine Ressource polymorph ansprechen möchte. Oder hast du dazu gerade ein Beispiel, Faule Socke?

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

22

20.02.2010, 15:53

Klappt das, obwohl sf::Resource<T> eine Template-Klasse ist?

Ich denke, ich werde mir eine Resourcenklasse selberschreiben müssen... Die Resourcen selber habe ich ja schon (sf::Image,sf::Music etc.)

Außerdem hat das den Vorteil, dass ich z.B. auch eigene Klassen als Resource verwenden kann (Ein Spielfeld etc.)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

23

20.02.2010, 16:00

CBenni::O ich kenne sfml zwar nicht, denke aber, die Klassen sf::Image und sf::Music sind von sf::Resource abgeleitet. Eventuell solltest du deine eigenen Resourcen dann auch von dieser Klasse ableiten oder du kapselst die sfml Resourcen nochmal zusätzlich, falls du das brauchst.

Nexus: Nein, abgesehen von eindeutiger Namensgebung der Resourcen (man könnte für den Name z.b. ne Absolute Pfadangabe nehmen, was das ganze mehr oder weniger eindeutig erscheinen lässt), die aber auch im Manager erfolgen könnte ist mir auch kein Beispiel eingefallen. Aber ich bin sicher, da würde sich was finden lassen, die Frage ist halt nur immer, ob er das braucht.

Socke

24

20.02.2010, 16:46

Zitat von »"Faule Socke"«

Aber ich bin sicher, da würde sich was finden lassen, die Frage ist halt nur immer, ob er das braucht.
Darauf wollte ich auch hinaus. ;)

Wenn du dynamische Polymorphie nämlich nicht brauchst, musst du auch nichts virtuell machen.

@ CBenni::O
Wie gesagt würde ich mir erst überlegen, was ich semantisch überhaupt will, bevor ich mich mit technischen Details wie Templates, Vererbung oder Aggregation auseinandersetze. Schau, wann du Ressourcen anfordern willst und wie die Schnittstelle dafür aussehen soll. Denn das ist ja schlussendlich der Teil, der dein Design bestimmt.

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

25

20.02.2010, 17:08

Darüber habe ich mir schon Gedanken gemacht:

Ich möchte einen Resourcen-Manager, dem man eine Art "Job" (Dateiname, Typ der Resource und Priorität übergibt und eine Resoucen-Id erhält.
Dieser Job wird von einem Zentralen Resourcen-Thread abgearbeitet.

Die geladene Resource kann man dann mithilfe der id dann abfragen/verwenden.

Ein Job kann eine einfache Struktur sein, die liste von Jobs eine Priority-List und un suche ich die Möglichkeit, die Resourcen selbst zuverlässig und einfach zu speichern.

Entschuldigung dafür, dass ich mich nicht klar genug ausgedrückt habe... :oops:
mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

idontknow

unregistriert

26

20.02.2010, 18:51

Mein Manager is soweit schon fertig :P.
Habs sogar schon getestet sollte alles funktionieren wie es soll :)

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

27

27.02.2010, 12:53

Sorry, aber ich bins nochmal :(

Mein ziel nochmal:
Einen Resourcenmanager, der wie gefolgt zu verwenden ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
sf::Image* LoadImage(std::string filename);

ResourceManager RM;
RM.AddJob<sf::Image>("Bild1.png", // Dateiname

                     5, // Priorität

                     LoadImage); // Funktion zum laden von sf::image, die von einem Internen Thread aus aufgerufen wird

App.Draw(*(RM.Aquire<sf::Image>("Bild1.png")));


So, das klappt soweit auch wunderbar; aber das Freigeben der Resourcen bildet immer noch schwieigkeiten.
Denn - wie gesagt - kann ich einen void* mit delete löschen, aber der Destruktor von dem Objekt wird nicht ausgelöst.
static_cast bringt abhilfe, doch dazu muss ich mir merken, welcher Datentyp die Resource ursprünglich hatte.
Hat jemand einen Lösungsvorschlag?

Danke schon mal im Voraus ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

idontknow

unregistriert

28

27.02.2010, 13:24

Dein Manager speichert also void*?
Wie rufst du den Destruktor auf? bzw wie löschst du deine Resource? (über den Manager!)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

29

27.02.2010, 13:48

Zitat

Denn - wie gesagt - kann ich einen void* mit delete löschen, aber der Destruktor von dem Objekt wird nicht ausgelöst.
static_cast bringt abhilfe, doch dazu muss ich mir merken, welcher Datentyp die Resource ursprünglich hatte.
Hat jemand einen Lösungsvorschlag?

void Zeiger sind C Varianten. Mach einfach eine Basisklasse, von der alle Ressourcen vererbt sind mit einem virtuellen Destruktor. Das ist der Weg, wie man sowas in C++ macht.

30

27.02.2010, 15:03

Besteht hier überhaupt ein Grund, von den statischen Typen zu abstrahieren? Du scheinst ja mit Templates zu arbeiten, dann sollte das nicht notwendig sein.

Werbeanzeige