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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

31

25.05.2010, 12:17

Für diese Managerklassen sind Singletons ggf vertretbar. Aber absolut nicht notwendig.
@D13_Dreinig

32

25.05.2010, 12:24

Ja, wie gesagt, das ist auch bei der Graphics Klasse nicht angebracht. Du schränkst dich, bzw. den Nutzer mit Singletons nur unnöitg ein. Es gibt genügend andere Varianten Probleme zu lösen, wie z.B. dass du das Device in anderen Klassen ebenfalls brauchst.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

33

25.05.2010, 14:11

Also ich habe jetzt einfach mal alle Singletons entfernt und habe folgendes gemacht:

- RessourcenManager hat 2 statische Listen ( Sounds, Texturen ), also KEIN Singleton
- Timer hat eine statische Funktion "UpdateAll()" und eine nicht statische "Update()"
- Draw ist einfach kein Singleton mehr^^

Bei Graphics und Audio bin ich mir aber nicht sicher.
Wenns nach euch geht ist eine statische Init-Funktion falsch bzw. beschränk die möglichkeiten,
aber wie solls denn sonst gehen?

idontknow

unregistriert

34

25.05.2010, 14:21

Du kannst auch Logklasse, Grafikklasse, ResourcenManager usw. in ner "übergeordneten" Game Klasse speichern/erstellen.
Wäre imho jetzt ne sehr schöne Lößung um Singletons zu vermeiden!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

35

25.05.2010, 14:26

Singletons durch statische Methoden/Member zu ersetzen ist auch nicht die richtige Lösung. Es gibt 1000 Quellen die beschreiben was Singletons für Nachteile bringen und warum sie zu vermeiden sind. Hier ein paar Links:

http://blogs.msdn.com/b/scottdensmore/ar…/25/140827.aspx
http://www.riedquat.de/prog/singletonsAreEvil
http://sites.google.com/site/steveyegge2…nsidered-stupid
http://www.ibm.com/developerworks/webser…/co-single.html
http://www.exubero.com/joe/2009/10/singl…vil-2-the-rant/
http://tech.puredanger.com/2007/07/03/pa…hate-singleton/
http://stackoverflow.com/questions/13797…bout-singletons

Da kristalisieren sich z.T. Aspekte heraus die du mit statischen Methoden gleichfalls bekommst (z.B. Objektbindung, ganz fieß für Unittests, ...).
@D13_Dreinig

36

25.05.2010, 14:54

Aber ich habe ja nicht alle Member und Funktionen statisch gemacht, sondern nur die, die wirklich nur einmal existiren sollten.
Wie z.B. beim Input die List der Tasten, die gedrückt sind. Wäre ja unsinn, wenn es die Liste mehrmals geben würde oder eben
die Listen der Sounds und Texturen. Mehr habe ich nicht statisch deklariert ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

37

25.05.2010, 15:07

Läuft aber auf was Ähnliches hinaus. Wieso sollte die Liste mit den "gedrückten Tasten" denn deiner Meinung nach statisch sein? Mir ist klar das alles um OO äußerst kompliziert ist und das es wesentlich simplere Paradigmen gibt. Singletons & Co bieten ne Möglichkeit mit genau dieser Denkweise zu programmieren und das scheint, gerade für Anfänger, äußerst Attriktiv zu wirken... Aber das ist Unsinn! Also bitte, versuch von dieser prozeduralen Denkweise weg zu kommen wenn du Objektorientiert entwickeln willst!
@D13_Dreinig

38

25.05.2010, 15:11

Also darf ich gar nichts statisch machen 8|
Ich hab die Tastenliste statisch gemacht, weil nur eine Tastatur unterstützt wird und weil ich in der WndProc genau EINE Liste aktualisiere.
Darf ich die Ressourcenlisten auch nicht statisch machen oder was? :pinch:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

39

25.05.2010, 15:13

Ich hab die Tastenliste statisch gemacht, weil nur eine Tastatur unterstützt wird und weil ich in der WndProc genau EINE Liste aktualisiere.

Warum brauchst überhaupt eine Tastenliste wenn du doch einfach in der WndProc auf das Ereignis "Taste wurde gedrückt" reagieren könntest?

Darf ich die Ressourcenlisten auch nicht statisch machen oder was?

Gegenfrage: Warum sollte sie statisch sein?

40

25.05.2010, 15:19

Ihr macht mir echt das Leben schwer :D

1. Weil ich es gerne so hätte:

C-/C++-Quelltext

1
if( KeyPressed( VK_UP ) ) { //do something }

und ich die WndProc schon vordefiniert habe.

2. Warum sollte man mehere Listen von Sounds benötigen bzw. es würde das Konzept eines Managers übern Haufen werfen

Werbeanzeige