我正在使用sfml在C ++中开发一个小型游戏。当您按下TAB按钮时,屏幕右侧会出现一个带有四个按钮的小菜单。我创建了一个class Button
,并且在该类中有一个sf::Text
属性。这是我用来绘制菜单的代码。
void DrawRightSideMenu(RenderWindow &win)
{
window.draw(rectInGameMenu);
for (list<Button>::iterator currentButton = rightSideMenuButtons.begin(); currentButton != rightSideMenuButtons.end(); currentButton++)
{
win.draw(*currentButton);
Text buttonTextToDraw = currentButton->GetButtonText(); //Crash here
win.draw(buttonTextToDraw);
}
}
在执行此代码之前,所有按钮都在另一个函数中创建。
rectInGameMenu
只是一个矩形,它可以正常工作。 win.draw(*currentButton);
效果很好,但是按钮中没有文本。因此,当我使用GetButtonText()
时,程序崩溃。这样我可以在按钮中绘制文本。我收到一个错误消息,说它无法读取内存中的该位置(Volation d'accèslors de la演讲的位置)0x550030BD。抱歉,我使用法语的Visual Studio。我真的不知道该怎么办才能解决这个问题。我做了一些研究,但找不到任何有相同问题的人……我已经有几天这个问题了,我真的不知道该如何解决。如果有更好的方法,请随时告诉我。编辑:
这是我创建按钮的代码:
Button aButton;
aButton = Button(10, "Ressources/Fonts/font.ttf");
aButton.SetButtonText("Button Text");
aButton.setSize(Vector2f(246, 60));
aButton.setFillColor(Color(22, 235, 65));
aButton.setPosition(773, 120);
aButton.GetButtonText().setPosition(240, 30);
rightSideMenuButtons.push_back(aButton);
这是在创建游戏窗口时调用的void函数中。现在,这是我在
class Button
中使用的方法:Button::Button(int inFontSize, string inFontButton)
{
fontSize = inFontSize;
fontButton.loadFromFile(inFontButton);
}
void Button::SetButtonText(string inButtonText)
{
buttonText.setString(inButtonText);
buttonText.setFont(fontButton);
buttonText.setCharacterSize(fontSize);
buttonText.setColor(Color(255, 255, 255));
}
这些是函数使用的方法。
buttonText
是Text
属性。 fontButton
是Font
属性。希望这对你们有所帮助。 最佳答案
检查这些:
确保您的文字字体正确
给您的文字加上颜色
渲染前给它一个字符串
这是我引擎中的一个函数,可以向游戏添加文本:
void Actor::addRenderedElement(sf::Text * txt, const char * font_name, const char* text, sf::Color color)
{
if (checkGameData()) {
sf::Font* _font = gamedata->getFont(font_name);
if (_font != nullptr) {
txt->setFont(*_font);
txt->setString(text);
txt->setColor(color);
renderedShapes.push_back(txt);
}
else
std::cout << "Invalid font name " << font_name << " for " << name << std::endl;
}
}
等视觉的安装;)
编辑:
根据您编辑的代码:
由于Button似乎也是一个形状,因此您确定给它一个纹理了吗?
以及如何确保正确加载字体,我看不到任何错误处理
我可以看到
GetButtonText()
功能吗?为什么不重载按钮中的
draw()
函数来绘制文本呢?您在哪里将新按钮添加到
rightSideMenuButtons
数组?这有效吗?
win.draw(currentButton->GetButtonText());