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

IaSfC

Frischling

  • »IaSfC« ist der Autor dieses Themas

Beiträge: 15

Beruf: Software & Games Developer

  • Private Nachricht senden

1

26.10.2015, 23:57

Erstellen eines SDL2 Frameworks

Wegen BlueCobold und angeblich "sehr schlechtem" Code gelöscht.

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »IaSfC« (27.10.2015, 15:48)


CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

2

27.10.2015, 01:24

Die Idee feier ich.
.., aber wenn du C++ nutzt warum dann das SAFE_DELETE-Makro, wenn's doch auch ein Template tut (und zwar besser/korrekter)?

3

27.10.2015, 05:39

Verbesserungsvorschläge sind gerne willkommen

Was mir als erstes ins Auge gesprungen ist, sind die IncludeGuards. Diese stehen zwar drin, machen aber nicht das wofür sie da sind.
Ich persönlich mag keine Init-Methoden, deshalb empfehle ich immer den Konstruktor zu nutzen deshalb ist er da.
Im Konstruktor von CGame wir m_bRunning schon mit true Initialisiert, vom Logischen ablauf nicht Korrekt da diese Variable erst nach aufruf von run() true sein sollte.

CGame.cpp

C-/C++-Quelltext

1
2
int result = 0;
    while( CEngine::IsRunning() && m_bRunning && result == 0 )

Das prüfen von result == 0 könnte man sich sparen, da es an dieser Stelle immer 0 ist (ebenfalls m_bRunning da auch immer true, siehe oben).

Ansonsten seid ihr ca. 5 Jahre zu späte ;) , damals hätte ich es gute gebrauchen können, um mal den Aufbau von Spielen nachvollziehen zu können.
Für Neulinge aber mit Sicherheit eine gute Sache.

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

27.10.2015, 06:36

C-/C++-Quelltext

1
2
    m_pEvent = new SDL_Event();
    if( m_pEvent == nullptr )
Wieso sollte das fehschlagen? Und wieso sollte es nullptr zurückliefer? Wenn new fehlschlägt, wirft es eine Exception. Der IF-Block wird jedenfalls nie betreten werden. Zusätzlich wäre bei Heap-Elementen auch unique_ptr zu empfehlen. Wir leben schließlich in 2015 ;) Wozu allerdings das Event überhaupt auf dem Heap liegen sollte... mir fällt da kein Grund für ein.

// Main wird hier als nicht definiert deklariertt
#undef main
Was zur Hölle ist denn das? Das habe ich ja noch nie gesehen! Das ist äußerst bedenklich. Mal davon abgesehen, dass deklariert nur mit einem t geschrieben wird.

result = game.Initialize();
...
game.Finalize();
Um Gottes Willen! Genau dafür sind Konstruktor und Destruktor da! Solche init-deinit-Methoden gehören verboten, auf den Müll geworfen und vergessen. Das ist super schlechter Stil, der etwas produziert, was eigentlich in C++ wunderbar funktioniert, wenn man es richtig macht!

#ifndef __ENIGNE_H__
Von Elementen, die mit zwei Unterstrichen beginnen, sollte man die Finger lassen. Diese Art der Deklaration ist für Compiler-spezifische Dinge vorgesehen.

Wie Koschi auch schon sagte, sind außerdem die Include-Guards alle bösartig falsch.

Ab damit auf GitHub
Nein, bitte nicht! So ein schlechtes Beispiel sollte nicht auch noch auf github liegen, da liegt schon viel zu viel schlechter Code.

Versteht mich bitte nicht falsch, ein Tutorial ist eine schöne Sache. Es sollte aber nicht von Neulingen geschrieben werden, sondern von jemandem, der Ahnung hat. Zudem passiert in dem Code ja gar nichts, außer dass die SDL hoch und runter gefahren wird. Das findet man doch sicherlich in den SDL-Samples (http://www.sdltutorials.com/tutorials) ebenfalls und das auf eine korrekte Art und Weise. Es ist gefährlich für andere Neulinge, wenn so schlechtes Halbwissen verbreitet wird!
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »BlueCobold« (27.10.2015, 07:09)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

27.10.2015, 08:07


// Main wird hier als nicht definiert deklariertt
#undef main
Was zur Hölle ist denn das? Das habe ich ja noch nie gesehen! Das ist äußerst bedenklich. Mal davon abgesehen, dass deklariert nur mit einem t geschrieben wird.

Die SDL bringt eine hauseigene main mit (SDL_main) welche als Makro "main" deklariert wird. Wenn du nun deine eigene main Funktion hast, musst du deren Makro undefen oder SDL_SetMainReady benutzen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

27.10.2015, 08:28

Und das macht man in einem Header? Zudem klingt die Verwendung der Main-Lib wohl wesentlich sinnvoller.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

27.10.2015, 08:46

Kann man auch. Ich persönlich undefe meistens.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

27.10.2015, 08:50

Ich halte das für sehr bedenkliche Praxis.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

IaSfC

Frischling

  • »IaSfC« ist der Autor dieses Themas

Beiträge: 15

Beruf: Software & Games Developer

  • Private Nachricht senden

9

27.10.2015, 12:07

Danke für eure Rückmeldungen,

@BlueCobold, falls du den text nicht richtig gelesen haben solltest, es steht ganz oben das dies kein Tutorial ist, sondern ein Framework. Desweiteren steht da auch das wir das ganze nochmal updaten und Sprites Laden.
Das ist lediglich das Grundgerüst auf das der Rest aufbaut.
Hast du dir mal auf SDL-Samples (http://www.sdltutorials.com/tutorials) das Basic Tutorial angesehen?? Auch hier wird eine eigene Initialize() verwendet. Er gibt zwar eine bool und kein int zurück, aber im Endeffekt das gleiche. Desweiteren benutzt er eine Cleanup Funktion, gleich zusetzen mit unserer Finalize(). Soviel zum thema sowas gehört auf den müll, das machen Konstruktor und Destruktor.
Kann man auch. Ich persönlich undefe meistens.
Danke, und nur weil BlueCobold so etwas noch nie gesehen hat, bedeutet das nicht das man es nicht macht. Und Rechtschreibfehler passieren.
Den buchstaben Dreher bei Engine habe ich auch behoben. Die beiden Fehler in den Include-Guards, habe ich grade gesehen und auch behoben, kommt davon wenn man schreibt und nicht Copy Pastet...

@Koschi Danke, ja hatte den text nicht kopiert, sondern gestern zum teil manuell eingefügt, da ist mir das passiert das ich den "#endif" aus versehen mit nach oben gesetzt hatte... hab es schon geändert :) Danke dir.

Das wir m_bRunning mit überprüfen liegt daran, das im Game selber über eine Funktion diese auf false gesetzt wird.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »IaSfC« (27.10.2015, 12:56)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

27.10.2015, 13:04

es steht ganz oben das dies kein Tutorial ist, sondern ein Framework.
Das macht es ehrlich gesagt sogar noch schlimmer, wenn jemand so schlechten Code direkt verwenden soll.

Hast du dir mal auf SDL-Samples (http://www.sdltutorials.com/tutorials) das Basic Tutorial angesehen?? Auch hier wird eine eigene Initialize() verwendet. (...) Soviel zum thema sowas gehört auf den müll, das machen Konstruktor und Destruktor.
Nur weil es jemand anders macht, macht es das nicht besser. Solche Sachen gehören in den Konstruktor oder Destruktor.

kommt davon wenn man schreibt und nicht Copy Pastet.
Aha, also eine indirekte Behauptung, dass andere ihr Zeug nur deshalb richtig schreiben, weil sie Copy+Paste verwenden? Sorry, aber das meinst Du hoffentlich nicht ernst. Das sind drei Zeilen winziger Code und so offensichtlich unlogisch, dass ich nicht nachvollziehen kann, wieso man das von Hand schreibt und es nicht merkt.

Die übrigen Mängel bleiben übrigens bisher auch noch bestehen... Heap statt Stack, Raw-Pointer statt Smart-Pointer.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (27.10.2015, 13:13)


Werbeanzeige