Tôi đang cố gắng viết mô-đun đồ họa của động cơ của tôi. Đó là, phần mã này chỉ cung cấp một giao diện để tải hình ảnh, phông chữ, vv và vẽ chúng trên màn hình. Nó cũng là một trình bao bọc cho thư viện tôi đang sử dụng (SDL trong trường hợp này).
Dưới đây là các giao diện cho tôi Image
, Font
và GraphicsRenderer
các lớp học. Xin vui lòng cho tôi biết nếu tôi đang đi đúng hướng.
Hình ảnh
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_;
};
Nét chữ
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();
};
Chỉnh sửa: Một số thay đổi về mã và biết thêm chi tiết.
Theo một số cuộc thảo luận ở đây, tôi quyết định thay thế việc sử dụng của mình void*
bằng một cái gì đó như thế này:
class Image
{
private:
struct ImageData;
std::shared_ptr<ImageData> data_;
};
(Rõ ràng là tôi sẽ làm điều tương tự cho Font
lớp học.)
Tôi cũng nên đề cập đến những chiếc mũ này không phải là lớp học hoàn chỉnh cuối cùng của tôi. Tôi chỉ hiển thị ở đây các chức năng cơ bản (tải và kết xuất). Thay vì cho tôi biết chức năng nào bạn nghĩ rằng tôi có thể cần thêm (xoay hình ảnh, nghiêng, chia tỷ lệ, v.v.) chỉ tập trung vào xem xét những gì tôi đã có. Tôi sẽ cố gắng bảo vệ những lựa chọn của mình nếu có thể hoặc thay đổi cách tiếp cận nếu không thể.