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

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

31

26.08.2003, 14:10

Zitat


Nartürlich, D. Scherfgen möchte auch Geld verdienen, aber, ich glaube, dies währe alles doch eine Überlegung wert.

Wer möchte das schon nicht. ;)
Aber wenn man ein Buch über ein solches Thema schreibt, hat man es dann nicht verdient? Denk mal drüber nach wieviel Arbeit das ist.

Zitat


und auch Turiotals, eine Online-Bibliothek...

Ist dort versteckte Ironie? Wenn nicht, dann schreib doch ein paar Tuts, David würde sie sicher gerne auf die Site aufnehm und wenn du schon dabei bist könntest du ihm ja eine auf seine Bedürfnisse angepasste Online-Bibiothek programmieren! ;)

Das er zumindenst für die die sein Buch gekauft haben, die aktuelle Version der Engine zum Download anbietet könnte ist wohl schon richtig, aber Tutorials über die Engine? Eine Online Bibiothek?
Am besten ihr mietet einen 4m² Keller sperrt ihn da mit seinen Rechner und INet Anschluss ein und er wird sein Leben lang nur noch Erweiterung für die Engine schreiben, sie Bugfixen und neue Tutorials rausbringen, er hat ja ey nichts besseres zutun.
Seit doch einfach dankbar das es jemanden gibt der mit euch sein Wissen teilt!
Aber wenn euch einer den kleinen Finger reicht ergreift ihr auch gleich die ganze Hand! ;D
Wer Ironie findet darf sie behalten.

Mein Vorschlag:
Die Leute die es echt toll finden würden mit Online Bibiothek und Community u.s.w. sorgt doch dafür das es das gibt! Soll das an einen Einzelnen hängen bleiben oder was? Ich bin mir sicher David würde euch da unterstützen und nicht nur er (ich beispielsweiße auch).
Aber es ist halt für einen Einzelnen zuviel all das zu machen!

Wenn David wieder ausm Urlaub zurück ist könnten wir ja mal drüber quatschen und wenn einer bereit ist ein Tutorial für die Community zu schreiben würde er es sicherlich uploaden aber er kann ja auch nicht alles alleine machen.

Ich könnte ja ein paar Scripte für ihn schreiben, aber an 1. Stelle steht bei mir dann trotzdem noch Gamedev! ;)

Ciao DarthB :huhu:

Anonymous

unregistriert

32

26.08.2003, 23:29

Ich schliesse mich DarthB an. Ich finde das es ein wenig viel verlangt ist das D.S. jetzt am besten für alle Leute die Wünsche intrigieren soll, wie z.B. das abschalten der LOG Funktion, ich bitte doch sehr ein wenig selbst arbeit wäre hier wohl angebracht und wer eine abschaltbare LOG möchte der sollte sich hinsetzen und das selber einbauen, zudem das garnicht mal so schwer ist. SORRY das ist hier nicht persönliches, aber meiner Meinung nach ist es wichtiger das das Thema um das es im Buch und auf dieser Seite geht weiter entwicklet wird. Bugs sind sicher ein Argument, welches hier angebracht ist, bzw. im entsprechenden Forum, weil hier geht es um die Engine Referrenz wie der Titel des Treads auch lautet.

Ich will hier keine Reden Schwingen sondern auch gleich mit guten Beispiel voran gehen , schaut Euch mal das an :

drxGUI (DiReX Grafic User Interface)

Vorwort :

Die DiReX GUI ( drxGUI ) ist die Grafische Benutzer Oberfläche der Engine. Sie ist in verschiedene Bereiche unterteilt. Sie setzt sich aus den folgenden 10 Klassen zusammen :

• drxGUI (Die Hauptklasse)
• drxGUIButton (Die Klasse für Buttons)
• drxGUICheckBox (Die Klasse für die Checkboxen)
• drxGUIElement (Die Klasse für die Oberflächen Elemente)
• drxGUIFrame (Die Klasse für die Rahmen)
• drxGUIImage (Die Klasse für die Bilder)
• drxGUIInput (Die Klasse für die Eingabe)
• drxGUIList (Die Klasse für die Listen)
• drxGUIRadioBox (Die Klasse für die Radioboxen)
• drxGUIText (Die Klasse für die Texte)

Mit Hilfe dieser Klassen werden die Benutzeroberflächen erstellt und behandelt. Die Hauptklasse ist hier die drxGUI , sie ist die Basis der GUI. Die Klasse drxGUIElement kapselt die die zugriffe und die Verwaltung der Elemente. In dieser Klasse sind alle Klassen der GUI als „friend class“ intrigiert. So das die Element Klasse auf die anderen Klassen der GUI zugreifen kann.

Die Klasse drxGUI :

Die drxGUI Klasse enthält die Hauptoberfläche drxGUIVertex , diese beinhaltet die folgende Struktur und den folgenden Aufbau :

Quellcode

1
2
3
4
5
6
7
8
9
 // Vertexformat
#define DRX_GUI_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
struct DIREX_API drxGUIVertex
{
    drxVector3  vPosition;  // Positionsangabe
    float       fRHW;       // 1/w
    D3DCOLOR    Diffuse;    // Streufarbe
    drxVector2  vTexture;   // Texturkoordinaten
};


drxVector3 vPosition enthält die Positionsangaben von der drxGUIVertex im Datenformat float , also z.B. im Format drxVector3(0.0f , 0.0f) . float fRHW ist zur Zeit noch nicht geklärt. D3DCOLOR Diffuse legt die Streufarbe fest. Mit drxVector2 vTexture wird die Texture gesetzt.

Aufzählung für Nachrichtentypen :

In der drxGUI gibt es die nachfolgenden Nachrichentypen die in der Aufzählung drxGUIMessageType zusammengefasst sind. Folgende Nachrichten gehören dazu :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Aufzählung für Nachrichtentypen
enum DIREX_API drxGUIMessageType
{
    DRX_GMT_CREATE,     // Das Element wurde erstellt.
    DRX_GMT_DELETE,     // Das Element wird gelöscht.
    DRX_GMT_ENTERPAGE,  // Betreten einer Seite
    DRX_GMT_MOVE,       // Das Element soll bewegt werden.
    DRX_GMT_RENDER,     // Das Element soll gerendert werden.
    DRX_GMT_ELEMENTCLICKED, // Ein Element wurde angeklickt.
    DRX_GMT_LBUTTONDOWN,    // Linker Mausknopf gedrückt
    DRX_GMT_LBUTTONUP,  // Linker Mausknopf losgelassen
    DRX_GMT_RBUTTONDOWN,    // Rechter Mausknopf gedrückt
    DRX_GMT_RBUTTONUP,  // Rechter Mausknopf losgelassen
    DRX_GMT_KEYDOWN,        // Tastaturtaste gedrückt
    DRX_GMT_KEYUP,      // Tastaturtaste losgelassen
DRX_GMT_KEYREPEAT,  // Wiederholter Knopfdruck (Taste bleibt      
                           gedrückt)
    DRX_GMT_SELECTION       // Auswahl bei einer Liste wurde geändert
};


Je nach Aktion werden die o.g. Nachrichten gesendet.

Die Struktur für eine Nachricht :

Die Struktur ist wie folgt aufgebaut :

Quellcode

1
2
3
4
5
6
7
8
// Struktur für eine Nachricht
struct DIREX_API drxGUIMessage
{
    drxGUIMessageType       Type;           // Typ der Nachricht
    int             aiInt[8];       // 8 Integer
    float               afFloat[8];     // 8 Fließkommazahlen
    void*               apPointer[8];   // 8 Zeiger
};


Die drxGUIMessageType Type gibt den Typen der Nachricht an (sihe oben und unten). Die drei unteren Variablen enthalten die Daten und Zeiger.

Aufzählung für Oberflächenelementtypen :

Die Oberflächenelementtypen bezeichnen die einzelnen Elemente (wie z.B. die Button , Rahmen , Texte , usw.). Derzeitig gibt es acht Elemente die sich wie folgt zusammen setzen :

• Rahmen
• Knopf
• Text
• Bild
• Radio-Box
• Check-Box
• Eingabefeld
• Liste


Die Aufzählung sieht dann wie folgt aus :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
// Aufzählung für Oberflächenelementtypen
enum DIREX_API drxGUIElementType
{
    DRX_GET_FRAME,      // Rahmen
    DRX_GET_BUTTON,     // Knopf
    DRX_GET_TEXT,       // Text
    DRX_GET_IMAGE,      // Bild
    DRX_GET_CHECKBOX,       // Check-Box
    DRX_GET_RADIOBOX,       // Radio-Box
    DRX_GET_INPUT,      // Eingabefeld
    DRX_GET_LIST,       // Liste
};


Das sind die acht Oberflächenelementtypen die es derzeitig in der DiReX Engine ( drxGUI ) gibt.

Die Klasse für ein Oberflächenelement setzt sich wie folgt zusammen :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Klasse für ein Oberflächenelement
class DIREX_API drxGUIElement
{
    friend class drxGUI;
    friend class drxGUIFrame;
    friend class drxGUIButton;
    friend class drxGUIText;
    friend class drxGUIImage;
    friend class drxGUICheckBox;
    friend class drxGUIRadioBox;
    friend class drxGUIInput;
    friend class drxGUIList;

private:
    // Variablen

    // ID des Elements
    int                 m_iID;
    // Typ des Elements
    drxGUIElementType           m_Type;
    // Auf welcher Seite ist das Element?
    int                 m_iPage;
    // Zu welcher Oberfläche das Element gehört
    drxGUI*             m_pGUI;
    // Position der linken oberen Ecke
    drxVector2              m_vPosition;
    // Breite und Höhe
    drxVector2              m_vSize;
    // Sichtbar?
    BOOL                    m_bVisible;
    // Aktiviert?
    BOOL                    m_bEnabled;
    // Wird das Element gerade gedrückt?
    BOOL                    m_bPressed;     

public:
    // Methoden

    // Das Element erhält eine Nachricht.
    virtual drxResult ReceiveMessage(const drxGUIMessage* pMsg) = 0; 

    // Inline-Methoden
    inline int              GetID() 
{return m_iID;}
    inline drxGUIElementType    GetType()                   
                        {return m_Type;}
    inline int              GetPage()                   
                        {return m_iPage;}
    inline drxGUI*          GetGUI()                    
                        {return m_pGUI;}
    inline drxVector2           GetPosition()               
                        {return m_vPosition;}
    inline drxVector2           GetSize()                   
                        {return m_vSize;}
    inline BOOL             IsVisible()                 
                        {return m_bVisible;}
    inline BOOL             IsEnabled()                 
                        {return m_bEnabled;}
    inline BOOL             IsPressed()                 
                        {return m_bPressed;}
    inline void             SetPage(int iPage)          
                        {m_iPage = iPage;}
    inline void             SetPosition(drxVector2 vPos)
                        {m_vPosition = vPos;}
    inline void             SetSize(drxVector2 vSize)   
                        {m_vSize = vSize;}
    inline void             Show(BOOL bShow)            
                        {m_bVisible = bShow;}
    inline void             Enable(BOOL bEnable)        
                        {m_bEnabled = bEnable;}
};


Die „friend class(en)“ betiteln die zusätzlich benötigten und zur Verfügung stehenden Klassen aus der GUI ( drxGUI ).

Die privaten Variablen der Klasse drxGUIElement :

Die Variable int m_iID gibt die ID (die Identifizierungsnummer) des Elements an, sie ist wie oben ersichtlich eine Integer Variable. Mit dieser Variable kann auf die einzelnen Elemente mit einigen Methoden (wie z.B. GetID () aus dieser Klasse) zugegriffen werden.

Die Variable drxGUIElementType m_Type gibt den Typen des Elements an , wie z.B. :

• DRX_GET_FRAME, // Rahmen
• DRX_GET_BUTTON, // Knopf
• DRX_GET_TEXT, // Text
• DRX_GET_IMAGE, // Bild
• DRX_GET_CHECKBOX, // Check-Box
• DRX_GET_RADIOBOX, // Radio-Box
• DRX_GET_INPUT, // Eingabefeld
• DRX_GET_LIST, // Liste

Die Variable int m_iPage gibt an auf welche Page (Seite) sich das Element befindet , bzw. auf welcher es erstellt werden soll.

Die Variable drxGUI* m_pGUI gibt an zu welcher Oberfläche das Element gehört, bzw. auf welcher Oberfläche das Element erzeugt werden soll.

Was würdet Ihr von so einer Referrenz halten, oder besser in diese Richtung ?

Nochmal @DarthB

ich habe David diesbezüglich auch meine Hilfe angeboten Ihn bei dieser Arbeit zu unterstützen, was er jedoch ablehnte, mit dem Komentar er würde dies lieber selber in die Hand nehmen. Aber das kann man diskutieren wenn David wider da ist. Ich finde David hat mit seinem Buch , seiner Engine , dieser Seite hier und mit Euch uns allen eine gute Basis geschaffen und deshalb sollte man Ihn auch versuchen zu unterstützen, aber jetzt genug damit das gehört meiner Meinung nach nicht ganz in diesen Tread.[/b]

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

33

27.08.2003, 01:54

Jo das sollten wir mal privat besprechen... warten wir einfach bis David wieder da ist.

P.S.
Mein Beitrag biete auch nicht persönlich nehmen, wenn man etwas gerne haben möchte bitte man halt darum und meint es vieleicht nicht so wie es für mich klang oder so!

Ciao DarthB :huhu:

34

27.08.2003, 09:14

OK ich stimm meinen Vorredneren zu! loool *ggggggg*
ebah rutangiS reniem ni relheF 01 rebü hci ssad, etniem latkraF!

Anonymous

unregistriert

35

27.08.2003, 15:42

Das wollt ich doch alles nicht. :crying: David ist der Beste, ich hätte soetwas nie geschafft. Soweit ich alles verstanden habe: Ich kann auch selbst die Logging-Funktion abschalten. Aber dann ist die TriBase nicht mehr TriBase. Und das heißt, der SpieleNutzer kann nicht mehr sich neue Versionen der TriBase runterladen, er ist sozusagen immer nur auf die "falsche" TriBase angewiesen. Und das gefällt mir nicht so ganz...

Anonymous

unregistriert

36

29.08.2003, 13:43

Nicht traurig sein,,,

das ist alles kein Problem, mit David seinem Patcher kannst Du die TriBase auch aktuell halten.

[Vorschlag 1]
Du nimmst die Log Funktion ganz raus, was nicht so gut wäre, erstellst dann die Engine und gibst diese dann an die "Kunden" weiter, Du selber behälst ja ja eh den Source & auch eine kompilierte bzw. gelinkte Version. Jetzt brauchst Du die Updates nur zu intregieren, dann neu erstellen, dann Patchen. Dann Update an "Kunden".

[Vorschlag 2]
Du erstellst Dir für das ab- und einschalten der Log einen Parameter den Du Deinem Programm mit Übergibst (z.B. -LogOn) und dann änderst Du Deine Engine so ab das die Log nur verwendet wird wenn der Parameter übergeben wurde.

Anonymous

unregistriert

37

11.09.2003, 17:29

@David,,,

hast Du Dir schon gedanken zu der Refferenzgeschichte der Engine gemacht ? Sprich wie das laufen könnte, wer Dich wie unterstützen könnte ?! Wir haben hier schon ein wenig bekagelt, wollten aber warten bis Du aus dem Urlaub wieder da bist *g*.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

38

11.09.2003, 18:11

Sorry, in der letzten Zeit kam ich nicht zu vielen Dingen... aber ich denke schon, dass es diese Referenzgeschichte geben wird. Partner brauche ich nicht, das mache ich lieber selbst (ich weiß ja am besten, was die einzelnen Funktionen tun und worauf man hinweisen muss etc.).

Anonymous

unregistriert

39

11.09.2003, 18:34

Ok das mußt Du ja entscheiden, aber recht hast Du keiner kennt das Innenleben besser als Du selbst. Ich hatte nur gedacht weil das halt eine Menge Schreibarbeit ist, Du könntest ja auch Stichpunktlisten mit Kurzerleuterungen machen. Aber Egal dann müssen wir halten warten bis es diese gibt, oder uns eine eigene Doku machen, das habe ich auch schon angefangen.

Werbeanzeige