C++ 存储SDL渲染器的预定义层

C++ 存储SDL渲染器的预定义层,c++,sdl,C++,Sdl,在这个问题上,我已经被困了很长一段时间: 我的代码看起来像这样 enum class LayerType {Foreground, Terrain, Background, Target}; class Texture { private: ... Texture * target; LayerType targetLayer; ... public: ... Texture & getTarget()

在这个问题上,我已经被困了很长一段时间: 我的代码看起来像这样

enum class LayerType {Foreground, Terrain, Background, Target};

class Texture
{
private:
    ...
    Texture       * target;
    LayerType       targetLayer;
    ...
public:
    ...
    Texture       & getTarget();
    void            setTarget(Texture & texture);
    ...
};

class Renderer
{
private:
    ...
    map<GAME::LayerType, Texture> layers;
    ...
public:
    ...
    void                drawTexture(Texture & texture);
    ...
};
问题是所有纹理都是按函数调用的顺序绘制的,而不是按目标纹理的顺序绘制的。我认为问题可能是缺少对目标纹理的引用

编辑:

左图显示其外观,右图显示其实际外观:

左侧图像的代码:

// s1, s2 are surfaces
// the targetTexture contains the sdl flags for a target texture
Texture targetTexture = Texture(this->renderer, LayerType::Target);
Texture t1 = Texture(this->renderer, s1, LayerType::Menu);
Texture t2 = Texture(this->renderer, s2, LayerType::Terrain);

while(running)
{
    this->renderer.setTarget(targetTexture);
    this->renderer.drawTexture(t1);
    this->renderer.setEmptyTarget();
    this->renderer.drawTexture(t2);
    this->renderer.present();
}
以及右图像的代码:

// s1, s2 are surfaces
Texture t1 = Texture(this->renderer, s1, LayerType::Menu);
Texture t2 = Texture(this->renderer, s2, LayerType::Terrain);

while(running)
{
    this->renderer.drawTexture(t1);
    this->renderer.drawTexture(t2);
    this->renderer.present();
}

我用指针解决了我的问题。我换了

map<GAME::LayerType, Texture> layers;
地图图层;

地图图层;

所以,我现在有了我的参考资料:-)

我用指针解决了我的问题。我换了

map<GAME::LayerType, Texture> layers;
地图图层;

地图图层;

所以,我现在有了我的参考资料:-)

如果我理解正确,您的想法是您有一个绘图算法,可以将某些图层类型一起绘制?e、 首先是所有的背景纹理等等?这是正确的。首先,所有地形瓷砖将绘制到地形层,然后绘制到树木,依此类推。之后,所有纹理层都将被绘制到屏幕上。但是,在成员变量
映射层
中,最多存储一个LayerType,因此每个LayerType只存储一个纹理。我想你想要每个图层类型有多个纹理,不是吗?因此,您可能需要一个
std::map
或类似的东西。存储在该贴图中的层将作为目标(前景、背景等),因此当调用
drawTexture
方法时,渲染器目标将设置为该纹理目标。事实上,纹理将被绘制到另一个纹理上。如果我理解正确,你的想法是你有一个绘制算法,可以将某些图层类型一起绘制?e、 首先是所有的背景纹理等等?这是正确的。首先,所有地形瓷砖将绘制到地形层,然后绘制到树木,依此类推。之后,所有纹理层都将被绘制到屏幕上。但是,在成员变量
映射层
中,最多存储一个LayerType,因此每个LayerType只存储一个纹理。我想你想要每个图层类型有多个纹理,不是吗?因此,您可能需要一个
std::map
或类似的东西。存储在该贴图中的层将作为目标(前景、背景等),因此当调用
drawTexture
方法时,渲染器目标将设置为该纹理目标。事实上,纹理将被绘制到另一个纹理上。
map<GAME::LayerType, Texture> layers;
map<GAME::LayerType, Texture*> layers;