当从内存加载选定的字体时,SFML 2.1 sf :: Text.setString()会导致崩溃

时间:2014-09-01 07:43:26

标签: c++ codeblocks sfml

如果我使用' 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)

0 个答案:

没有答案