Ich versuche, das Grafikmodul meiner Engine zu schreiben. Das heißt, dieser Teil des Codes bietet nur eine Schnittstelle, über die Bilder, Schriftarten usw. geladen und auf dem Bildschirm gezeichnet werden können. Es ist auch ein Wrapper für die Bibliothek, die ich verwende (in diesem Fall SDL).
Hier sind die Schnittstellen für meine Image
, Font
und GraphicsRenderer
Klassen. Bitte sag mir, ob ich den richtigen Weg gehe.
Bild
class Image
{
public:
Image();
Image(const Image& other);
Image(const char* file);
~Image();
bool load(const char* file);
void free();
bool isLoaded() const;
Image& operator=(const Image& other);
private:
friend class GraphicsRenderer;
void* data_;
};
Schriftart
class Font
{
public:
Font();
Font(const Font& other);
Font(const char* file, int ptsize);
~Font();
void load(const char* file, int ptsize);
void free();
bool isLoaded() const;
Font& operator=(const Font& other);
private:
friend class GraphicsRenderer;
void* data_;
};
GrapphicsRenderer
class GraphicsRenderer
{
public:
static GraphicsRenderer* Instance();
void blitImage(const Image& img, int x, int y);
void blitText(const char* string, const Font& font, int x, int y);
void render();
protected:
GraphicsRenderer();
GraphicsRenderer(const GraphicsRenderer& other);
GraphicsRenderer& operator=(const GraphicsRenderer& other);
~GraphicsRenderer();
private:
void* screen_;
bool initialize();
void finalize();
};
Bearbeiten: Einige Änderungen am Code und weitere Details.
Nach einigen der Diskussionen hier habe ich beschlossen, meine Verwendung void*
durch so etwas zu ersetzen :
class Image
{
private:
struct ImageData;
std::shared_ptr<ImageData> data_;
};
(Natürlich werde ich das Gleiche für die Font
Klasse tun .)
Ich sollte auch erwähnen, dass dies nicht meine letzten, vollständigen Klassen sind. Ich zeige hier nur die Grundfunktionen (Laden und Rendern). Anstatt mir zu sagen, welche Funktionen ich Ihrer Meinung nach hinzufügen muss (rotierende Bilder, Schrägstellung, Skalierung usw.), konzentrieren Sie sich nur darauf, zu überprüfen, was ich bereits habe. Ich werde versuchen, meine Entscheidungen zu verteidigen, wenn ich kann, oder meinen Ansatz ändern, wenn ich nicht kann.