我使用SFML Game Development by Example(Raimondas Pupius)创建了一个简单的游戏引擎(第7章)。我得到了编译的代码,但是当我尝试加载地图(文本文件)时游戏崩溃,我无法找到错误的内容。在加载瓷砖时,我当然也从瓷砖表中加载所需的图形,使用:
bool RequireResource(const std::string& l_id) {
auto res = Find(l_id); // <-- Crash here.
if (res) {
++res->second;
return true;
}
auto path = m_paths.find(l_id);
if (path == m_paths.end()) { return false; }
T* resource = Load(path->second);
if (!resource) { return false; }
m_resources.emplace(l_id, std::make_pair(resource, 1));
return true;
}
Find()似乎是罪魁祸首,它看起来像这样:
std::pair<T*, unsigned int>* Find(const std::string& l_id) {
auto itr = m_resources.find(l_id); // <-- Crash here.
return (itr != m_resources.end() ? &itr->second : nullptr);
}
这是m_resources:
std::unordered_map<std::string, std::pair<T*, unsigned int>> m_resources;