我正在使用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()
时程序崩溃了。这样我就可以在按钮中绘制文字了。我得到一个错误,说它无法读取记忆中的那个位置(Violation d'accèslorsde la lecture de l'emplacement 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
属性。希望这对你们有所帮助。
答案 0 :(得分:0)
检查这些:
这是我的引擎中添加文本的功能:
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;
}
}
Et installe l'anglais sur visual;)
编辑:
从您编辑的代码:
由于Button似乎也是一个形状,你确定你给它一个纹理吗?
你是如何确保你的字体正确加载,我没有看到任何错误处理
我可以看到GetButtonText()
功能吗?
为什么不重载按钮中的draw()
功能来绘制文本?
您在哪里将新按钮添加到rightSideMenuButtons
阵列?
这有用吗?
win.draw(currentButton->GetButtonText());