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

Anonymous

unregistriert

1

20.05.2003, 12:02

Clevere Kapselung und Implementation einer Engine,...

Hi,
ich hab vor kurzem das Buch gelesen, und mich sehr geärgert, das es
kaum auf das Design der Engine eingeht, sondern lediglich auf die Implementation bestimmter Funktionen.
Die Tribase Engine z.B. liegt ja als DLL vor. Ausserdem besteht sie aus einigen statischen Klassen.
Meine Frage ist nun folgenede:
In meinem Projekt soll die Engine (eine Eigene) nicht als DLL eingebunden sein, aber trotzdem abgekapselt sein! (damit sie wiederverwendbar wird.
Wie kann man das einfach und effektiv realisieren, hat jemand eine Idee?
Ausserdem würden mich ein paar Details zu den statischen Klassen Interessieren.
Irgendwo im Buch stand, das sie anders geplant gewesen wären, dann aber wohl doch statisch wurden - wieso? Und was bedeutet es konkret wenn eine Klasse statisch ist?

mfG Moritz

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.05.2003, 12:16

Eine statische Klasse ist eine Klasse, von der man nur eine Instanz braucht.
Welche Informationen bezüglich des Designs der Engine hättest Du für wünschenswert gehalten? Vielleicht kann ich in der zweiten Auflage mehr dazu reinschreiben. Trotzdem: dieses Buch soll hauptsächlich zeigen, wie man bestimmte Techniken anwendet, wie DirectX funktioniert und wie man damit ein Spiel programmieren kann. Es heißt ja auch 3D-Spieleprogrammierung und nicht 3D-Engine-Programmierung.
Wenn Du nur auf Engine-Design aus bist, dann gibt es andere Bücher, die sich nur mit dem Thema beschäftigen. Aber man kann's eben nie allen recht machen... :(

Anonymous

unregistriert

3

20.05.2003, 12:30

Sorry, das war jetzt keine Kritik an dem Buch!

Ich hab einfach mal drauflos programmiert (ich weiss, ich weiss...)
und festgestellt, das ich arge Probleme damit bekam, von bestimmten Klassen auf bestimmte Funktionen zuzugreifen,...
Es ist halt sehr wichtig wie man bestimmte Klassen kapselt! Einige Tipps im nächsten Buch währen bestimmt nett!

Wenn du sagts das es andere Bücher gibt (noch besser kostenlose Links,.. *g) dann schiess mal los was du für Quellen empfehlen könntest,..

Wie gesagt, ich möchte weg von der DLL,....
Ich stell mir das debuggen und testen dann einfacher vor,...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

20.05.2003, 12:36

Ist schon gut wenn Du Kritik äußerst! So kann die zweite Auflage umso besser werden :)
Aber welche Informationen Du genau meinst, weiß ich noch nicht. Hast Du denn das gesamte Buch schon gelesen?

Es gibt z.B. dieses Buch hier über 3D-Engine-Design:
http://www.amazon.de/exec/obidos/ASIN/1558605932/ref%3Dase%5Fscherfgensoft-21/302-8695749-4465600
Der Preis von dem Buch ist allerdings einfach nur unverschämt...

Es stimmt: man kann statische Libraries einfacher debuggen als DLLs, finde ich zumindest. Du hast aber auch folgenden Nachteil. Angenommen Du arbeitest an Deiner Engine und an Deinem Spiel, was die Engine benutzt. Wenn Du nun die Engine neu kompilierst, musst Du das Spiel ebenfalls neu linken, und Visual Studio hat da manchmal so seine Probleme, das zu erkennen. Das kann auf die Nerven gehen.
Außerdem wird Deine EXE-Datei viel größer.

5

20.05.2003, 12:56

zu den statischen klassen:

warum benutzt du keine singletons? statische klasse wirken so...global ;)
stay tight, project universe comes back!
### project earth <> 2004 ###

Anonymous

unregistriert

6

20.05.2003, 12:58

Ich hab das Buch nicht von vorn bis hinten durchgelesen, denke aber das ich nur stellen überblättert habe, die damit nix zu tun haben!
z.B die Vector, Matritzen und Ebenen Klasse,....

So, um jetzt mal ein konkretes Beispiel zu nennen:
Im Buch steht rein gar nix darüber, wieso du manche Klassen statisch angelegt hast,...
Ich hab mich direkt gefragt, warum nimmt der Bursche keine Singletons!
Verkettete Listen werden auch gar nicht im Buch besprochen, obwohl sie
in der Engine ja implementiert sind (ich weiss, die Seitenzahl,...).
Trotzdem sind all das ja wichtige Aspekte einer Engine. Gerade verkettete Listen sind ja aus der Spieleprogrammierung nicht wegzudenken.

Mal ganz konkret, wiese sind das denn nun statische Klassen und keine Singletons! Was sind die entscheidenen Unterschiede zwischen den beiden Techniken????

mfG eidos

Anonymous

unregistriert

7

20.05.2003, 12:59

Ja, jetzt sind wir schon 2 dies wissen wollen.....
eidos

8

20.05.2003, 13:01

da ham wirs, noch einer mit der meinung :D

ich denke einfach, dass statische klassen weniger speicher auf dem heap benötigen, da die adressen aller funktionen gespeichert werden müssen, weil alle darauf zugreifen können müssen

bei singletons is es so, dass man eine instanz der singleton erzeugen muss, um sie zu verwenden, statische klassen sind immer da
stay tight, project universe comes back!
### project earth <> 2004 ###

Anonymous

unregistriert

9

20.05.2003, 13:06

Richtig!
Bei einer statischen Klasse hindert einem auch nix und niemand daran beliebig viele Objekte der Klasse zu erzeugen!
(Natürlich in der TB Engine schon so implementiert, das es nicht möglich ist)

Ausserdem, wenn mich nicht alles täuscht sind statische "member" nicht einmal von einer Instanz der Klasse verfügbar, da sie Ja zur Klasse und nicht zu dessen Objekte gehört,...oder?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

20.05.2003, 13:06

Statische Members sind schon von den Instanzen her zugreifbar. Ich kann zwar beliebig viele Instanzen einer statischen Klasse erzeugen, aber die fressen ja sogut wie keinen Speicher weg.
Fragt mich bitte nicht aus: "Warum hast Du das so und so gemacht und nicht so und so, obwohl es so und so doch viel besser wäre!". Niemand ist perfekt und würde ich es jetzt nochmal neu schreiben, würde ich es anders machen. Man lernt nie aus.

Werbeanzeige