我有一个问题得到sfml rendertexture正确地返回它的纹理我相信我已经缩小到这一点的代码。我相信这与我试图将rendertexture中的纹理复制到纹理贴图的方式有关。SFML rendertexture不返回纹理
renderedchunks将是私人我只是公开测试功能快速。
这里的头文件
#ifndef TILE_MAP_H
#define TILE_MAP_H
#include "SFML/Graphics.hpp"
#include <map>
#include "Chunk.h"
//Class designed to manipulate chunks
//
class Tile_Map
{
public:
Tile_Map();
void RenderChunk(Texture_Manager&, int x, int y);
void CreateChunk(int x, int y); //Eventually will create based on biomes
std::map<int, std::map<int, sf::Texture> > renderedchunks;
protected:
private:
std::map<int, std::map<int, Chunk> > chunkmap; //Used to store all created chunks
};
这里的cpp文件
#include "Tile_Map.h"
Tile_Map::Tile_Map()
{
//ctor
}
void Tile_Map::CreateChunk(int x, int y)
{
chunkmap[x][y];
Chunk& chunk = chunkmap[x][y];
chunk.SetBiome("grass");
}
void Tile_Map::RenderChunk(Texture_Manager& tempmanager, int x, int y)
{
sf::RectangleShape drawable[8][8];
sf::RenderTexture drawingtexture;
Chunk& rchunk = chunkmap[x][y];
float renderx = 0;
float rendery = 0;
if(rchunk.GetBiome() == "grass")
{
for(int it = 0; it < 8; it++)
{
for(int it2 = 0; it2 < 8; it2++)
{
drawable[it][it2].setTexture(&tempmanager.GetTexture("grass"));
drawable[it][it2].setPosition(renderx, rendery);
drawingtexture.draw(drawable[it][it2]);
std::cout << "x = " << renderx << std::endl;
renderx += 32;
}
renderx = 0;
std::cout << "y = " << rendery << std::endl;
rendery += 32;
}
}
drawingtexture.display();
renderedchunks[x][y] = drawingtexture.getTexture();
}
我的块类没有存储纹理。 tile_map类负责为它创建纹理并存储它。只有玩家周围的区块才会被渲染。然后在不能再被看见时从记忆中释放出来。 – Joshua
也不是每个块看起来都一样,它们最终都会根据它们的生物群落和周围块的生物群落拥有特定的瓷砖 – Joshua
如果您有类似资源管理器的东西,那么您可以选择特定的块纹理,它不是问题,主要想法是,你的原始纹理将在该资源管理器中,其他所有将只是引用,对原始纹理做参考 –