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

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

15.01.2013, 19:44

DirectX engines...

Ich lerne zurzeit DirectX ( 9 ) im Bezug auf C++. Ich habe mir gedacht, um DirectX etwas näher zu kommen, eine kleine Engine zu programmieren.
Ich habe mir einige kleine Beispiele usw. sowie die TriBase-Engine angeschaut.
Als ich ,dann am überlegen war, wie ich meine eigene Engine umsetzten soll kam mir die Idee ,diese auf anonyme Klassen aufzubauen.
( gemeint ist: )

C-/C++-Quelltext

1
2
3
4
5
6
class MeineKlasse{
    public:
    
int einVariabel; // eigentlich Sinnlos :D
void TuEtwas();
} Anonym;



Ist diese Vorgehensweise Sinnvoll?

Hoffentlich ist meine Frage verständlich....
Danke

P.S.: Ich denke daran dieses Buch zu kaufen -> Das Buch
Ist das Buch gut? Oder kennt ihr bessere?
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Techie« (15.01.2013, 20:48)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

2

15.01.2013, 21:25

Was meinst du mit "anonyme Klasse"?

3

15.01.2013, 22:24

Hab das zwar noch nie benutzt, aber damit die Klasse auch wirklich anonym ist, müsstest du afaik den Klassennamen weglassen, denn sonst sollte man eigentlich noch weitere Instanzen erstellen können. Ist aber Halbwissen, da ich das wie gesagt nie benutzt habe.

Desweiteren ist das eigentlich eine Form des Singleton Patterns und ich weiß nicht ob du das wirklich möchtest.

Mein Vorschlag wäre:
Besorg dir das hier: http://www.amazon.de/Patterns-Elements-R…58284100&sr=1-1 und dann versuch erstmal ein paar Dreiecke (ich weiß jetzt nicht wie weit du bereits gekommen bist), Würfel, was auch immer auf den Bildschirm zu bringen und zu bewegen. Vielleicht auch mit Sound Effekten oder einfache Physik, was du willst. Dann kannst du dir überlegen, wie du das ganze kapseln möchtest, so dass du es einfach wieder benutzen kannst. Dann baust du ein paar weitere Sachen ein, überdenkst eventuell ein paar Stellen, änderst das Design, so das die neuen Sachen mit den Alten gut zusammenpassen und irgendwann solltest du eine kleine nützliche Bibliothek haben.

Es ist nur ein Tip, ich persönlich komme mit dieser Herangehensweise ganz gut klar.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

15.01.2013, 23:52

am wichtigsten ist an dieser Stelle: "Write games, not engines!"
wenn man nicht weiß, wie ein Spiel aufgebaut ist oder was es benötigt, kann man keine Engine bauen, die eine Implementierung eines Spiels ermöglicht/vereinfacht
da ich bisher nichts von dir gesehen habe, gehe ich einfach (vielleicht auch fälschlicherweise) davon aus, dass du bisher kein Spiel fertiggestellt hast

ich denke auch nicht, dass du anonyme Klassen benötigst, da dies in Richtung Singleton geht
die Eigenschaft einer anonymen Klasse ist es, keinen Namen zu haben und dadurch kann davon nur bei der Definition auch eine Instanz erstellt und sie somit genutzt werden
im Unterschied zu einem "richtigen" Singleton (oder zumindest dem, was ich bisher immer in der Richtung gesehen habe) ist, dass man die Instanz der Klasse polymorph verwenden muss und somit nur auf Methoden und Eigenschaften der Basisklasse bzw. der Interfaces Zugriff hat


aber mal angenommen, du lässt dich nicht davon abhalten und fängst mit deiner Engine an:
was zeichnet sie aus? was wird ihr Alleinstellungsmerkmal im Gegensatz zu anderen Engines?
wirst du versuchen, die Optik weit besser rüber zu bringen? (was wohl sehr schwer wird und wenn du besser als die anderen sein willst vielleicht auch unschaffbar)
soll der Entwickler bei seiner Arbeit entlastet werden? (auch enorm schwer, aber nicht ganz so unmöglich)
oder soll etwas bestimmtes bereits in der Engine implementiert sein, sodass der Entwickler es sich nicht erst zusammenscripten muss? (was wiederum dafür sorgen kann, dass die Engine weniger flexibel oder unsauberer wird)

soll es eine Engine für 2D oder 3D Spiele sein?
mit wie vielen Engines hast du vorher schon gearbeitet?
wie viel hast du dich bereits mit dem Rendering beschäftigt?

und vor allem: was verstehst _du_ unter einer Engine, wenn du eine entwickeln willst? (es gibt immerhin verschiedene Vorstellungen davon, was eine Engine ist)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

16.01.2013, 00:02

In C++ gibt es übrigens keine anonymen Klassen... ;)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

16.01.2013, 00:53

In C++ gibt es übrigens keine anonymen Klassen... ;)

ich als nicht-C++-Nutzer darf natürlich in der Hinsicht unwissend sein, aber in Bezug auf irgendeine Sprache habe ich etwas, wie eine anonyme Klasse (keine anonyme innere Klasse, sowas gibt es beispielsweise in Java) gelesen
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

16.01.2013, 08:33

@Techie:
Dieser Thread ist in jeglicher Hinsicht sinnlos.
1.) Der Titel hat gar nichts mit der Frage zu tun.
2.) Dein Code, der deine Idee demonstrieren soll, hat nichts mit deiner Idee zu tun.
3.) Die Idee an sich ist sinnlos.
4.) Beim Design einer Engine ist diese Frage von keinerlei Bedeutung.

Das ist vergleichbar mit einem Thread namens "Wo am günstigsten Katzenfutter kaufen?", in dem du dann über die Konstruktion eines Flugzeugs sprichst und die Idee beschreibst, die Sitze der Bordtoilette in violett anzufertigen. Dazu dann noch ein Foto, das jedoch statt eines Toilettensitzes eine Teekanne zeigt.

Wenn du ein Troll bist, wovon ich fast ausgehe, dann hast du gute Arbeit geleistet.

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

8

16.01.2013, 19:49

Im C++ Programmierer wird ,das was ich meine, Anonyme Klassen oder Anonyme Deklaration genannt ( bitte korrigiert mich wenn ich das falsch verstanden habe ).

Die Idee war eigentlich das ich eine Grundklasse zum Initialisieren von Direct3D habe :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
class CFramework{

protected:
LPDIRECT3D9 m_pD3D;
LPDIRECT3DDEVICE9 m_pD3Device;
HWND m_hWnd;
public:
CFramework();
HRESULT InitD3D( HWND hWnd = m_hWnd );
//....

} CFrameGame;


Ich packe alles was zur Erstellung von einem Fenster samt Initialisierung gehört in eine Klasse.
Somit habe ich die ersten nötigen Variablen deklariert und definiert. Ich könnte diese Klasse ,dann etwa so nutzen:

C-/C++-Quelltext

1
2
3
4
5
6
INT WINAPI wWinmain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ){
CFrameGame.Init();           // Fenster erstellen
CFrameGame.InitD3D();    //  Direct3D initialisieren.
                                        // Code ist nicht vollständig aber ich hoffe ihr versteht was ich meine  :?: 

}


Dann später sollen weiter Klassen sich auf diese ( CFrameGame ) beziehen und von dort z.B: m_pD3Device holen ( / nutzen ).

Nun meine Frage: Ist diese Vorgehensweise sinnvoll ?

Ich bin noch nicht so sehr Erfahren was C++ betrifft ( etwa 1 Jahr, mache gerade ein kleines Spiel mit SDL )
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

16.01.2013, 19:57

am wichtigsten ist an dieser Stelle: "Write games, not engines!"
wenn man nicht weiß, wie ein Spiel aufgebaut ist oder was es benötigt, kann man keine Engine bauen, die eine Implementierung eines Spiels ermöglicht/vereinfacht
da ich bisher nichts von dir gesehen habe, gehe ich einfach (vielleicht auch fälschlicherweise) davon aus, dass du bisher kein Spiel fertiggestellt hast



zu der Klasse:
vergiss einfach, was du da gerade verwenden willst, da es, ob anonyme Klasse oder nicht, in Richtung Singleton geht
lege doch einfach eine normale Klasse an, von der du an oberster Stelle ein Objekt erzeugst, welches du an die benötigten Stellen weiterreichst
fertig

aber schon alleine daran, dass du dir nicht wirklich sicher bist, ob du das so gebrauchen kann, merkt man, dass du für eine Engine nicht bereit bist
schreibe erst einmal ein paar Spiele, bevor dich an etwas wagst, was du "Engine" nennen willst
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

10

16.01.2013, 19:58

Du würdest also eine Art Singleton-Klasse bauen, die kein Singleton ist, jedoch nur einmal instanziiert werden darf? Das ist definitiv keine gute Idee. Wenn du eine Klasse haben willst, die z.B. Schnittstellen, wie das 3D-Device hält, solltest du dir Dependency Injection anschauen (Infos dazu z.B. hier: http://programmaticallyspeaking.blogspot…ction-in-c.html).

Werbeanzeige