[我希望这适用于 SO,我认为这对“程序员”来说有点太实用了,对“gamedev”来说太技术性了,但如果不合适,请随意移动。]
基本上我只是想快速检查一下我的微型视频引擎的实际设计,它应该能够简单地绘制图像(渲染库无关紧要)和动画精灵。friend
尽管我认为渲染应该由我的 VideoEngine 类(因此不在 Image 中)完成,但我很难将我的头脑围绕在这个任务的一个好的设计上,但这导致我被迫使用extern
这不是好的设计我听见。这可能是因为我没有正确编码,但我认为这更像是一个设计问题。
// Sprite.h
class Image
{
public:
Image();
Image(std::string path);
~Image();
bool IsDisplayable() { return displayed; }
void LoadImage(std::string path);
static std::vector<Image*> image_list;
private:
SDL_Surface* image_surface;
bool displayed;
friend class VideoEngine;
};
// VideoEngine.h
extern class Image;
class VideoEngine
{
public:
VideoEngine();
VideoEngine(int width, int height);
~ VideoEngine();
void Initialize(int width, int height);
void RenderImages();
void ShutdownVE();
private:
SDL_Surface* main_display;
SDL_Rect main_display_area;
};
// VideoEngine.cpp
void VideoEngine::RenderImages()
{
std::vector<Image*>::const_iterator ci;
for(ci = Image::image_list.cbegin(); ci != Image::image_list.cend(); ci++)
{
if((*ci) != 0 && (*ci)->IsDisplayable())
{
SDL_BlitSurface((*ci)->image_surface, 0, main_display, 0);
SDL_Flip(main_display);
}
}
}
正如你所看到的,我需要从类image_surface
中访问的事实迫使我使用和做相反的事情(图像具有渲染功能)只会迫使我使用完全相反的(VideoEngine 是图像的朋友,我认为这很丑陋)。Image
VideoEngine
friend
extern
TLDR:这种双重关系可以用任何干净的方式解决吗?我认为可行但需要更多检查资源的一件事是每次创建图像时以某种方式通知 VideoEngine 并将 SDL_Surface 指针传递给它以存储在列表中。这会是更好的设计吗?