(如果我问错这个问题,我很抱歉,这是我第一次在论坛上写)
当我开始在我的 SFML - Game 上编程时,我有一本非常古老的书,它非常类似于 C(例如 atoi() 的推荐;)。
现在我有了一本新的 C++(包括 C++11)书,我想用更新的代码重写旧行。
我将 Tiles 保存在一个像这样存储的文件中:
[0-0,15-1|22,44] [0-1|0]
[4-0,10-1,3-1|0] [0-5,5-5|0]
这意味着:
[...] 描述 Tile
0-0 等是纹理表上的 xy 位置
22 等是将被触发的事件。
事件的数量和 sf::Vector2i 不应该经常设置。
Tiles 是从另一个类中单独取出的,该类管理整个 Tilemap。
现在我的问题:我不知道我应该如何将字符串中的数字推送到两个向量中?我的代码:
class Tile{
private:
std::deque<sf::Sprite> tile;
std::deque<int> event;
public:
Tile(sf::Texture& texture, std::deque<sf::Vector2i>&& ctor_texturerects, std::deque<int>&& ctor_events);//This one is working fine
Tile(sf::Texture& texture, std::stringstream&& ctor_stream/*reads the Tile*/){
std::deque<sf::Vector2i> temp_texturerects;
std::deque<int>temp_events;
/*TODO: filter the stringstream and push them into the containers*/
Tile::Tile(texture,std::move(temp_texturerect),std::move(temp_events));
}
如果你能给我另一个解决方案,我也会很高兴,比如将 sf::Vector2i 更改为更好的解决方案或给我一个更好的流和类概念
在此先感谢
Xeno Ceph
编辑:
我做了一些解决方法:(
我将输入流更改为普通字符串)
但是代码看起来不太好必须有一个更简单的解决方案
Tile:: Tile(sf::Texture& texture, std::string&& ctor_string){
std::deque<sf::Vector2i> temp_texturerects;
std::deque<int> temp_events;
std::stringstream strstr;
for(int i=0; i<ctor_string.size(); ++i){
while(ctor_string[i]!='|'){
while(ctor_string[i] != ','){
strstr << ctor_string[i];
}
sf::Vector2i v2i;
strstr >> v2i.x >> v2i.y;
temp_texturerects.push_front(v2i);
strstr.str("");
}
while(ctor_string[i]!=']'){
while(ctor_string[i] != ','){
strstr << ctor_string[i];
}
int integer;
strstr >> integer;
temp_events.push_front(integer);
strstr.str("");
}
}
Tile::Tile(texture, std::move(temp_texturerects), std::move(temp_events));
}
有人有更好的解决方案吗?