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

Flooy

Frischling

  • »Flooy« ist der Autor dieses Themas

Beiträge: 29

Wohnort: NRW, Essen

  • Private Nachricht senden

1

05.12.2014, 13:29

Kleine 2D Engine - Frage

Huhu, ich bastel momentan an einer kleinen 2D Engine - bin mir jedoch unsicher bei der Scenen "Verwaltung" (?).
Momentan schaut der "Endverbraucher" Code so aus:

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
26
27
28
29
U2D::Texture* sprites;
class titleMenuScene : public U2D::GameScene{
    void onLoad(){
        std::cout << "Load Title Menu" << std::endl;
    };
    void onUnload(){
        std::cout << "Unload Title Menu" << std::endl;
    };
    void onMouseDown(int button,int x,int y){
        std::cout << "onMouseDown("<<button<<","<<x<<","<<y<<");" << std::endl;
    };
    void onMouseUp(int button,int x,int y){
        std::cout << "onMouseUp("<<button<<","<<x<<","<<y<<");" << std::endl;
    };
    void onUpdate(){

    };
    void onRender(){
        for(int x = 0 ; x < 10 ; x++)
        for(int y = 0 ; y < 10 ; y++)
        U2D::DrawTexture(sprites,512,512,512,512,   128*x,128*y,128,128);
    };
};
int main(){
    U2D::Init("Example",1280,720,false);
    U2D::CreateScene("titleMenu",new titleMenuScene());
    sprites=U2D::LoadTGA("terrain.tga");
    return U2D::Run("titleMenu");
}

Würde mich über Verbesserungsvorschläge bz. Ideen freuen ^^
Ich bin zu Un-kreativ für eine gute Signatur :wacko:

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

2

05.12.2014, 15:16

Was soll man denn ohne Erklärung zu diesem Code Schnipsel sagen? Also man könnte viel sagen zum allgemeinen Stil usw.
Schon bei so wenig Code wäre da einiges zu bemängeln. Aber was für ein Konzept hast Du dir denn vorgestellt? Was soll
die onLoad Methode? Wird die einmal aufgerufen? Jedes Mal wenn die Scene aktiviert wird? Ist eine Scene immer aktiv?
Warum löscht Du dein Scene Objekt nicht? Stören dich Memory Leaks nicht? Die Namensgebung der Methoden ist unglücklich,
weil man nicht erkennt was dahinter steckt.

Flooy

Frischling

  • »Flooy« ist der Autor dieses Themas

Beiträge: 29

Wohnort: NRW, Essen

  • Private Nachricht senden

3

05.12.2014, 16:18

Zitat

Was soll man denn ohne Erklärung zu diesem Code Schnipsel sagen?
Finde der Code erklärt sich selbst, immerhin deuten die Namen der Funktionen auf die Bedeutung hin (Jedenfalls meiner Meinung nach)

Zitat

Also man könnte viel sagen zum allgemeinen Stil usw.Schon bei so wenig Code wäre da einiges zu bemängeln.
Dann leg los, immerhin habe ich nicht gegen Verbesserungsvorschläge, wie oben schon geschrieben (:

Zitat

Aber was für ein Konzept hast Du dir denn vorgestellt?
Hmm... Weis ehrlich gesagt nicht wie ich das formulieren soll, halt das ich mehrere Szenen erstellen und habe und diese einfach wechseln kann (Die Idee war wohl für Title-Menu / eigentliches Spiel / etc.. ) .

Zitat

Was soll die onLoad Methode? Wird die einmal aufgerufen? Jedes Mal wenn die Scene aktiviert wird? Ist eine Scene immer aktiv?
Diese Methode wird jedesmal aufgerufen wenn diese Aktiviert wird ( Hätte wohl ein anderen Namen nehmen sollen ^^ ) bz. wenn eine andere Szene aktiviert wird wird die "onUnload" Methode aufgerufen - fand ich ganz Nützlich ( ka zum Speichern / Laden ).

Zitat

Warum löscht Du dein Scene Objekt nicht? Stören dich Memory Leaks nicht?
Übernimmt die Engine - bz. es gibt noch eine "onDestory" Methode - da ich aber im Beispiel nur mit den Funktionen der Engine gearbeitet habe, und diese sich da drum kümmert, habe ich die Methode auch nicht verwendet.

Zitat

Die Namensgebung der Methoden ist unglücklich, weil man nicht erkennt was dahinter steckt.
Ist wohl Geschmacks Sache, abgesehen von "onLoad" & "onUnload" finde ich alles ganz übersichtlich evtl. kann ich noch "onRender" in "onDraw" ändern aber ich finde das sind triviale Angelegenheit die nicht grade eine hohe Priorität besitzen - immerhin arbeite ich noch dran (:
Ich bin zu Un-kreativ für eine gute Signatur :wacko:

4

05.12.2014, 16:40

Generell sollte der, der ein Objekt erzeugt, es auch selbst wieder zerstören. du kannst z.B der Engine eine 'CreateGameScene' hinzufügen, die ein GameScene objetkt erstellt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
template <class T>
GameScene *CreateGameScene()
{
   delete CurrentGameScenePtr;
   CurrentGameScenePtr = new T;
   return CurrentGameScenePtr;
}

//...

CreateGameScene<titleMenuScene>();


Dabei brauchst du auch kleine OnLoad und OnDestroy Methoden, dafür gibts ja den Konstruktor

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Roflo« (05.12.2014, 16:47)


Flooy

Frischling

  • »Flooy« ist der Autor dieses Themas

Beiträge: 29

Wohnort: NRW, Essen

  • Private Nachricht senden

5

05.12.2014, 16:54

Danke Schon mal, ist jedenfalls keine schlechte Idee und ich werde es wohl auch so einbauen ^^
Die "onLoad"/"onUnload" Methoden sind dafür da das die Szene die Info bekommt ob sie nun angezeigt / behandelt wird oder nicht. ( Habe die beiden bei mir nun auch "onSelect" / "onUnselect" benannt da man via U2D::SelectScene(...); die Szenen wechseln kann. :D
Ich bin zu Un-kreativ für eine gute Signatur :wacko:

6

05.12.2014, 18:40

Wieso müssen es überhaupt Objekte auf dem Heap sein? ;)

7

05.12.2014, 19:12

onLoad brauchst du doch nicht. Wenn du die Scene wechselst, rufst du CreateGameScene<Scene>() auf (sollte man anders nennen). Das macht diese Methoden überflüssig. Du kannst natürlich auch die Scenen alle einmal erstellen und dann seletktieren.

Flooy

Frischling

  • »Flooy« ist der Autor dieses Themas

Beiträge: 29

Wohnort: NRW, Essen

  • Private Nachricht senden

8

05.12.2014, 20:03

Zitat

Wieso müssen es überhaupt Objekte auf dem Heap sein? ;)
Hmm.. naja müssen müssen sie nicht aber naja hat sich so ergeben ^^

Zitat

Du kannst natürlich auch die Scenen alle einmal erstellen und dann seletktieren.
Genau das mach ich ja ^^
Ich bin zu Un-kreativ für eine gute Signatur :wacko:

Werbeanzeige