【发布时间】:2013-12-26 22:05:29
【问题描述】:
我目前使用的系统会根据瓦片集读取瓦片地图的 x 和 y 并显示相关图像。这行得通,但是我发现手动创建地图非常困难,因此决定使用一个名为“Tiled”的程序,但这确实是读取图像,在我的情况下每 32px 并将其设置为一个数字,让我试试解释一下,假设下面的每个数字都是一个 32x32px 的正方形,这个数字表示 Tiled 如何将图像存储为一个数字,直到它达到图像的宽度(例如,图像是 160px 或 5 个图块宽),然后打开新行继续计数..
[1] [2] [3] [4] [5]
[6] [7] [8] [9]
这会抛出我的脚本,因为未使用 x 和 y。我已经尝试过搜索并尽可能多地调整我的代码以读取新格式,但完全失败了,下面是我当前加载地图的函数。
void LoadMap(const char*filename)
{
std::ifstream openfile(filename);
std::vector<sf::Vector2i> tempMap;
map.clear();
if(openfile.is_open())
{
std::string tileLocation;
openfile >> tileLocation;
tileTexture.loadFromFile(tileLocation);
tiles.setTexture(tileTexture);
while(!openfile.eof())
{
std::string str, value;
std::getline(openfile, str);
std::stringstream stream(str);
while(std::getline(stream, value, ' '))
{
if(value.length() > 0)
{
std::string xx = value.substr(0, value.find(','));
std::string yy = value.substr(value.find(',') + 1);
int x, y, i, j;
for(i = 0; i < xx.length(); i++)
{
if(!isdigit(xx[i]))
break;
}
for(j = 0; j < yy.length(); j++)
{
if(!isdigit(yy[j]))
break;
}
x = (i == xx.length()) ? atoi(xx.c_str()) : -1;
y = (j == yy.length()) ? atoi(yy.c_str()) : -1;
tempMap.push_back(sf::Vector2i(x, y));
}
}
if(tempMap.size() > 0)
{
map.push_back(tempMap);
tempMap.clear();
}
}
}
}
我所需要的只是脚本为每个 32x32 方格分配一个数字,然后开始一个新行并继续直到它到达 tilemap.png 的末尾
如果这是一个愚蠢的请求,我深表歉意,我对 c++ 非常陌生,因此任何关于使我的代码读取新格式的指针将不胜感激,如果您需要任何其他信息,请告诉我。
【问题讨论】: