所以我正在尝试使用 SFML 中的方法,它似乎以某种方式破坏了对象.setFont(sf::Font)
的其余部分。sf::Text
我正在使用以下函数来执行此操作:
sf::Text Renderer::CreateText(FontEntity font)
{
sf::Text out;
out.setFont(font.GetFont());
out.setString(font.GetText());
out.setCharacterSize(24);
out.setColor(sf::Color::White);
out.setStyle(sf::Text::Bold);
return out;
}
以上用于我实现的绘图调用中,并且我认为问题可能出在哪里(尽管我不确定在哪里):
void Renderer::Draw(DrawData* drawData)
{
this->window->clear();
for (Entity* entity: drawData->GetEntities())
{
auto fontEntity = static_cast<FontEntity*>(entity);
// If font entity
if (fontEntity)
{
sf::Text text = CreateText(*fontEntity);
this->window->draw(text);
}
}
this->window->display();
}
这循环遍历对象列表Entity
,将它们转换为FontEntity
对象,将转换后的对象传递FontEntity
给CreateText(FontEntity)
方法,然后尝试绘制sf::Text
返回的对象。
但是,当out.setString(font.GetText());
被调用时,我得到了异常:
GameEngine.exe 中 0x6177BA8C (sfml-graphics-d-2.dll) 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000D。
另一方面,如果我删除该out.setFont(font.GetFont())
行,则不会发生此错误。
我想知道是否有人确切地知道这里发生了什么?我似乎找不到关于这个特定问题的任何建议,我已经尝试(但失败了)遵循SFML Text and fonts tutorial。
我的第一个想法是我遇到了某种狡猾的指针问题,但据我了解本教程,我正在尝试做的事情应该没问题。
该类FontEntity
是一个自定义类,我用它来管理有效的可绘制字符串,但可以Entity
很好地存储在我的对象列表中。
.h 文件(如果有帮助)如下:
#include "Entity.h"
#include <string>
#include "SFML\Graphics.hpp"
class FontEntity : public Entity
{
public:
FontEntity(float x, float y, sf::Font font);
FontEntity(float x, float y, sf::Font font, std::string text);
~FontEntity(void);
std::string GetText(void);
void SetText(std::string);
sf::Font GetFont(void);
void SetFont(sf::Font);
int GetSize(void);
void SetSize(int);
protected:
std::string text;
sf::Font font;
int size;
};
和 .cpp 文件:
#include "stdafx.h"
#include "FontEntity.h"
FontEntity::FontEntity(float x, float y, sf::Font font) : Entity(x, y)
{
this->text = "";
this->font = font;
}
FontEntity::FontEntity(float x, float y, sf::Font font, std::string text) : Entity(x, y)
{
this->text = text;
this->font = font;
}
FontEntity::~FontEntity(void)
{
}
std::string FontEntity::GetText(void)
{
return this->text;
}
void FontEntity::SetText(std::string text)
{
this->text = text;
}
sf::Font FontEntity::GetFont(void)
{
return this->font;
}
void FontEntity::SetFont(sf::Font font)
{
this->font = font;
}
int FontEntity::GetSize(void)
{
return this->size;
}
void FontEntity::SetSize(int size)
{
this->size = size;
}
谢谢阅读!非常感谢所有输入。