如果我使用' loadFromFile()'在我的字体上,它正确加载它,游戏运行。 但是,如果我在这里使用这个示例代码:
sf::Font TempFont;
//TempFont.loadFromMemory(&tempImageVec[0],lengthh);
TempFont.loadFromFile("Arial.ttf");
WorldPointer->loadedFonts.push_back(TempFont);
//WorldPointer->loadedFonts[WorldPointer->loadedFonts.size()-1].loadFromMemory(&tempImageVec[0],lengthh);
WorldPointer->loadedFontNames.push_back("Arial");
它完全有效,字体可以绘制到游戏中,但是如果我这样做:
std::streampos lengthh;
std::ifstream file2("Arial.ttf", std::ios::in | std::ios::binary);
if(file2){
file2.seekg(0,std::ios::end);
lengthh = file2.tellg();
file2.seekg(0,std::ios::beg);
vector<char> tempImageVec(lengthh);
file2.read(&tempImageVec[0],lengthh);
sf::Font TempFont;
TempFont.loadFromMemory(&tempImageVec[0],lengthh);
WorldPointer->loadedFonts.push_back(TempFont);
WorldPointer->loadedFontNames.push_back("Arial");
}
(请注意,此代码与.loadFromFile()完全相同,但它手动完成,它将Arial.ttf文件加载到游戏内存中,然后从内存加载字体,这个确切的方法适用于SFML中的其他类(如纹理))
当使用第二个代码时,游戏会在尝试使用.setString时编译(&#34;此处有任何文字&#34;);游戏崩溃,使用完全相同的精灵代码。
这两个代码的反应都是一样的,但第二个代码(我想要使用的代码)会使游戏失灵。
我使用带有代码块的SFML 2.1
继承调试内容:
#0 0048DD0C tt_cmap4_char_map_binary () (??:??)
#1 004938E6 tt_cmap4_char_index () (??:??)
#2 0043C1A1 FT_Load_Char () (??:??)
#3 004128C2 sf::Font::loadGlyph(this=0x7069208, codePoint=32, characterSize=25, bold=false) (D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp:388)
#4 0041233E sf::Font::getGlyph(this=0x7069208, codePoint=32, characterSize=25, bold=false) (D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp:259)
#5 004146CC sf::Text::updateGeometry(this=0x28fdc4) (D:\developpement\sfml\sfml\src\SFML\Graphics\Text.cpp:248)
#6 00413F50 sf::Text::setString(this=0x28fdc4, string=...) (D:\developpement\sfml\sfml\src\SFML\Graphics\Text.cpp:68)
#7 00405656 world::world(this=0x28f2e8, MRP=0x28f100) (C:\Users\Heath\Desktop\Game Programming\Current Projects\Left4Zombie C++\world.cpp:11)
#8 004038A3 main() (C:\Users\Heath\Desktop\Game Programming\Current Projects\Left4Zombie C++\main.cpp:12)
(LoadGlyph is highlighted red)