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

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

1

03.02.2010, 13:01

CBFramework

Hallo!

Endlich ist es (mehr oder weniger) fertig, mein Framework, das ich für mein aktuelles (eigentliches) Projekt erstellt habe. Es verwendet die SFML-2.0 (kompiliert im Download enthalten), um Tilebasierte Spielfelder zu verwalten.

Features:
- Die Klasse CBenni::O::Gameboard, die ein Spielfeld darstellt:
[list]- Zeichnen eines Spielfeldes von 32x32 Feldern größe ~ 1200 FPS (im Vergleich dazu: Zeichnen eines Spielfeldes(Tileweise): ca. 30 FPS)
- Möglichkeit,das Spielfeld zu bewegen, drehen etc.
- Einfaches Handling[/list]- Die Klasse CBenni::O::FloatingObj, die ein frei bewegliches Objekt darstellt:
[list]- Einfache Rotation, Bewegung
- "Fliegen": Objekt bewegt sich in einer gegebenen Zeit zum Zielort
- Rotation um Mittelpunkt - Position von der oberen linken Ecke
[/list]Download

mfg CBenni::O[/url]
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

2

03.02.2010, 16:20

Nett. Was ich zu kritisieren hätte wäre dieses CBenni::O im Code. Das würde mich beim proggen nur stören. Du solltest statdessen ausagekräftige Namen nehmen. Aber sonst gute Arbeit. :)

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

3

03.02.2010, 16:36

Ja, sry das musste sein^^

Es sollte halt eine persönliche note haben :D

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

4

03.02.2010, 17:24

Zitat von »"CBenni::O"«

Ja, sry das musste sein^^

Es sollte halt eine persönliche note haben :D
Aber das ist doch kein Grund, sinnlose Namensräume einzurichten. Nimm wenigstens CBenni_O oder sowas, wenn du das Framework schon unbedingt nach dir benennen willst.

Sonstige Verbesserungsvorschläge:
  • Benenne deine Header eindeutig, oder verfrachte sie in einen zusätzlichen Projektordner. Denn ein #include "main.hpp" kann sehr schnell zu Namenskonflikten führen.
  • char* ist eine schlechte Wahl für Zeichenketten. Ich empfehle std::string, oder zumindest const char* in Parameterlisten.
  • Nimm Konstruktoren anstelle von öffentlichen Init-Funktionen.
  • Dein Code ist voller Memory Leaks. Du verwendest C++, als hätte es einen Garbage Collector. Setze nicht so oft new ein, sondern benutze wo es geht automatische Objekte und RAII. Ich konnte in deinem Code ein einziges delete erkennen...
  • Da du komplett auf Konstruktoren, Zuweisungsoperatoren und Destruktoren zu verzichten scheinst, aber deine Klassen dennoch keine Wert-Semantik haben, kommt es sehr schnell zu undefiniertem Verhalten (von Memory Leaks gar nicht erst zu sprechen).
  • Funktionen, die immer den gleichen Wert zurückgeben, sollten besser Rückgabetyp void haben. Das betrifft z.B. bool Gameboard::Render(sf::RenderWindow* App)
  • Achte auf Const-Correctness. Memberfunktionen, die das Objekt nicht verändern, sollten const-qualifiziert sein. Das gilt unter anderem für alle Getter.
Da gibts sicher noch mehr Kritikpunkte, aber für mich wären das erstmal genügend Gründe, dein Framework nicht zu benutzen. Das ist nicht persönlich gemeint, aber solche Probleme machen Code eben sehr benutzerunfreundlich.

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

5

03.02.2010, 17:41

Danke ;)

Ich weiß, es ist noch längst nicht perfekt, deshalb ist es ja auch noch Version 0.0.1...

und #include "main.hpp" wird nur intern genutzt. Der User includiert CBFramework.hpp

mfg CBenni::O

EDIT: Achso und:

Zitat von »"Nexus"«

Setze nicht so oft new ein, sondern benutze wo es geht automatische Objekte und RAII.

Kannst du mir da gute Links empfehlen?
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

6

03.02.2010, 17:50

Zitat von »"CBenni::O"«

Ich weiß, es ist noch längst nicht perfekt, deshalb ist es ja auch noch Version 0.0.1...
Trotzdem würde ich schauen, diese Fehler so schnell wie möglich zu beheben. Und auf solche Dinge darf man auch von Anfang an Rücksicht nehmen. ;)
Ist sogar empfehlenswert, da ein schlechtes Design als Basis nur dazu führt, dass das weitere Projekt darauf aufbauen und sich entsprechend anpassen muss.

Zitat von »"CBenni::O"«

und #include "main.hpp" wird nur intern genutzt. Der User includiert CBFramework.hpp
Für den Compiler macht das keinen Unterschied. Wenn der User selbst auch eine "main.hpp" hat, hast du ein Problem.

Zitat von »"CBenni::O"«

Kannst du mir da gute Links empfehlen?
Z.B. http://en.wikibooks.org/wiki/C++_Programming/RAII. Bei Google findest du sicher noch mehr, ich kenne leider auch nicht mehr konkrete Artikel oder Links. Aber am besten beraten bist du aber auf jeden Fall mit Büchern wie z.B. Effective C++ oder Exceptional C++.

7

03.02.2010, 17:57

Zitat

EDIT: Achso und:
Nexus hat Folgendes geschrieben:
Setze nicht so oft new ein, sondern benutze wo es geht automatische Objekte und RAII.

Kannst du mir da gute Links empfehlen?

Google hilft ;)
Anstonsten guck dir mal shared_ptr und auto_ptr an.

Zitat

Effective C++

Ja, kann ich empfehlen.

8

03.02.2010, 18:01

Zitat von »"E122"«

Anstonsten guck dir mal shared_ptr und auto_ptr an.
Ja, aber sei vorsichtig mit Smart-Pointers. Oft brauchst du gar keine Zeiger. Und in sehr vielen Fällen reicht scoped_ptr. Leider wird shared_ptr von vielen Programmierern überbewertet und leichtsinnig eingesetzt. Doch geteilte Besitzverhältnisse sind eher die Ausnahme, und shared_ptr ist kein GC-Ersatz.

Über die Smart-Pointers von Boost gibt es übrigens hier einen Artikel.

9

03.02.2010, 18:06

Zitat

Ja, aber sei vorsichtig mit Smart-Pointers. Oft brauchst du gar keine Zeiger. Und in sehr vielen Fällen reicht scoped_ptr. Leider wird shared_ptr von vielen Programmierern überbewertet und leichtsinnig eingesetzt. Doch geteilte Besitzverhältnisse sind eher die Ausnahme, und shared_ptr ist kein GC-Ersatz.

Hab ich das behauptet ? ;)
Zur verdeutlichung hätt ich vielleicht noch ein ,... hinmachen sollen ?
Schon klar, dass es noch mehr gibt ;)

10

03.02.2010, 19:10

Zitat von »"E122"«

Hab ich das behauptet ? ;)
Nein, aber da im Zusammenhang mit Smart-Pointers fast immer als erstes shared_ptr erwähnt wird und sich CBenni::O diesbezüglich noch nicht so auskennt, hielt ich meine Anmerkung für gerechtfertigt.

Damit du mich nicht missverstehst: Der Post war eher an CBenni::O als an dich gerichtet. ;)

Werbeanzeige