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

1

12.09.2010, 16:28

Simple2D Framework

Guten Tag :)

Ich habe endlich mein kleines all-in-one Framework für 2D Spiele feature-complete geschrieben.

Folgende Features sind verfügbar:

  • Html-Log
  • lesen/schreiben von config files
  • eigene Klasse für Vektoren
  • einfaches Erstellen eines Fensters
  • direkter Zugriff auf den Backbuffer (GetPixelColor, SetPixelColor) (leider extrem unperformant)
  • Rotation/Skalierung/Colorkeying von Texturen
  • Animationen
  • TrueType Fonts
  • Bitmap Fonts
  • Eingabe über Tastatur/Maus
  • Wiedergabe von vielen verschiedenen Soundformaten
  • Gruppieren von Sounds zur unterschiedlichen Lautstärkeregelung
  • einfache Server- und Clientklassen
  • optional einen ResourcenManager

Technik:

Grafik -> Direct3D
Input -> DirectInput
Netzwerk -> Winsockets
Sound -> DirectShow

Wäre nett wenn ihr euch das mal angucken könntet und ein bisschen Kritik äußern würdet (ruhig viel negative, ich will ja was lernen ;))

Hier gibst das Framework
Inkludieren muss man die Simple2D.h, linken die Simple2D.lib

viele Grüße

Bene

goldfisch007

Alter Hase

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

2

13.09.2010, 05:37

klingt interessant ich gucks mir mal an :)
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

3

13.09.2010, 18:57

Ich würde etwas Beispiel Code wie man deine Lib verwendet ganz gut finden ^^ Wenn mir der gefällt dann schau ichs mir auch mal an ;)

4

13.09.2010, 19:45

Hallo newby,

hab nur mal ganz ganz kurz reingeschaut. Bin nicht wirklich zum Testen gekommen... aber vielleicht ein paar wenige kleine Tipps:
  • Besonders wenn du anderen dein Framework zur Verfügung stellen willst solltest du deinen Quellcode ausführlicher kommentieren. Erläuterungen zu den Funktionen und den Parametern, die erwartet werden etc. sind nicht bzw. nur minimal zu finden. Das macht es schwer bzw. viel Aufwand sich in dein Framework einzuarbeiten.
  • Du solltest dir angewöhnen deinen Funktionen einen Rückgabewert zu verpassen. Was wenn zum Beispiel Window.Create() schief läuft? Du schreibst zwar eine Meldung in ein Log-File, aber die Funktion hat keinen Rückgabewert, wie willst du also innerhalb deines Programms prüfen ob alles glatt ging?! Als Rückgabewert könntest du dir einen "Datentyp" bzw. eine Aufzählung basteln, die verschiedene, eigene Resultate definiert.
  • Es gibt - wie du vielleicht schon gesehen hast - einen gar nicht all zu alten Thread zum Thema "Ungarische Notation" oder ähnliches. Die verursacht bei dir ein bisschen Verständnis-Probleme an manchen Stellen. Beispiel: Warum übergibst du der Funktion Create() der Klasse CWindow ein ... , HINSTANCE pInstance, ... ? Was soll das "p" am Beginn des Variablennamen, deutet das nicht auf einen Zeiger hin? Aber es ist doch gar kein Zeiger!?
Nur ein paar kleine Auffälligkeiten beim ersten Blick.

Gruß
SaRu_

5

13.09.2010, 19:49

Du solltest dir angewöhnen deinen Funktionen einen Rückgabewert zu verpassen. Was wenn zum Beispiel Window.Create() schief läuft? Du schreibst zwar eine Meldung in ein Log-File, aber die Funktion hat keinen Rückgabewert, wie willst du also innerhalb deines Programms prüfen ob alles glatt ging?! Als Rückgabewert könntest du dir einen "Datentyp" bzw. eine Aufzählung basteln, die verschiedene, eigene Resultate definiert.

Für sowas sollte man besser Exceptions verwenden, die sind nämlich dafür gedacht ;)

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

6

13.09.2010, 22:32

Für sowas sollte man besser Exceptions verwenden, die sind nämlich dafür gedacht

Am besten beides, so kann der User selbst entscheiden, was ihm besser gefällt.

Ein Beispiel, wie so eine Error-Aufzählung aussehen könnte:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
enum Result {   ERR_OK,
                ERR_CANCELED,
                ERR_STOP,
                ERR_OUT_OF_MEMORY,
                ERR_NULL_POINTER,
                ERR_NOT_FOUND,
                ERR_EMPTY,
                ERR_INVALID,
                ERR_FAILED
};


Ich bin ja grundsätzlich für ungarische Notation, deswegen verbessere ich es. Es muss so heißen:
HINSTANCE hInstance ("h" für Handle).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

13.09.2010, 23:43

Zitat von »PCShadow«
Für sowas sollte man besser Exceptions verwenden, die sind nämlich dafür gedacht


Am besten beides, so kann der User selbst entscheiden, was ihm besser gefällt.


Nein, wieso? Es reicht wenn Fehlerbehandlung in einer Form konsequent durchgezogen wird!
@D13_Dreinig

8

14.09.2010, 00:50

Zitat

Zitat

Zitat von »PCShadow«
Für sowas sollte man besser Exceptions verwenden, die sind nämlich dafür gedacht


Am besten beides, so kann der User selbst entscheiden, was ihm besser gefällt.


Nein, wieso? Es reicht wenn Fehlerbehandlung in einer Form konsequent durchgezogen wird!

Ich halte Exception für sinvoller, aus mehreren Gründen, und zwar z.B.:

Erstens benötigen manche Methoden ihre Rückgabewerte für Ergebnissausgabe ( Beispiel: int getScreenWidth(), double div(double z, doble n) ).
Bei dieser Funktionen kann man die Rückgabewerte nicht für Fehlerbehandlung nutzen, somit wäre es un-konsequent.

Desweiteren ein kleiner Code-Schnipsel.

Mit Rückgabewerten würde das ganze so aussehen, man muss dann jede Funktion auf Rückgabewert prüfen:

C-/C++-Quelltext

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
int RenderDevice:Create(...)
{
    hr = CreateDevice(...);
    if(hr)
    {
        // hier Aufräumcode
            return -1;
    }

    hr = CreateVertexBuffer(...);
    if(hr)
    {
        // hier Aufräumcode
            return -1;
    }

    // ...
 
    hr = CreateIndexBuffer(...);
    if(hr)
    {
        // hier Aufräumcode
            return -1;
    }
}


Wenn man Exception nutzen würde, wäre der Code viel kürzer und die Rückgabewerte wären frei verfügbar für sinnvlollere Aufgaben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void RenderDevice:Create(...)
{
 try
 {
    CreateDevice(...);
    CreateVertexBuffer(...);
     // ...
    CreateIndexBuffer(...);
 }
 catch(...)
 {
     // Error - Behandlung oder Weiterleitung
 }
}


Gruß,
Sergius

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Sergius« (14.09.2010, 01:00)


9

14.09.2010, 13:12

danke erstmal für die zahlreichen antworten :)

@ jeason
um mein framework zu verwenden, musst du zunächst den Simple2D Ordner in dein projektverzeichnis kopieren (da wo auch die *.h und *.cpp dateien liegen)
in deinem code musst du jetzt nur die Simple2D.h inkludieren und die Simple2D.lib linken. Die dll selber muss da liegen, wo am ende auch deine exe liegt (z.B. im Ordner debug oder release). Hier ein kleines Beispiel, welches so lange läuft, wie das fenster geöffnet ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma comment(lib, "Simple2D/Simple2D.lib")
#include "Simple2D/Simple2D.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
     CWindow Window;
     Window.Create("Test Fenster", 800, 600, hInstance);

     while(!Window.Closed())
     {
          Window.DoMessageLoop();
          Sleep(1);
     }

     Window.Destroy();
     return 0;
}


@Saru
Ich gebe dir Recht, der Code ist wirklich sehr spärlich kommentiert. Ich habe schon überlegt eine kleine Doku zu schreiben, dann wären die Kommentare im Code nicht mehr soo wichtig. Gibt es eigentlich ein Tool was einem dabei hilft? Ich meine so die Klassen aus den .h files auslesen, sodass ich nur noch schreiben muss was die methoden machen? Und zur ungarischen Notation: benutze ich eigentlich nicht, nur m für Membervariablen, das p steht für Parameter, hab ich mir wohl bei Java in der Schule angewöhnt. Aber ja, ich weiß wie die funktioniert.. :)

@PCShadow
Ich wollte eigentlich schon exceptions einbauen, aber ich habe irgendwo gelesen, dass es nicht so gut sein soll exceptions aus einer dll zu werden und diese dann in einer anderen exe abzufangen, stimmt das? Sonst würde ich einfach überall, wo ich etwas ins log schreibe noch ne exception werden.

Bene

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

14.09.2010, 13:46

Was ich gleich im Beispiel sehe: Komm weg von "Create" und "Destroy" Funktionen. Dafür gibt es Konstruktoren und Destruktoren. Genau für das sind die nämlich da!

Werbeanzeige