此功能似乎会使应用程序崩溃。我评论了它然后应用程序运行正常。你们看到我做错了吗?
buttons
是map
,其密钥的类型为string
,值为sf::sprite
我让它在while
循环中运行,当它被告知菜单打开时运行
std::string Menu::buttonPress(sf::RenderWindow* window, sf::Event* event)
{
while(window->pollEvent(*event))
{
if(event->type == sf::Event::EventType::MouseButtonPressed)
{
sf::Vector2i mousepos = sf::Mouse::getPosition(*window);
for(auto it: buttons)
{
sf::Rect<float> sprite;
sprite = it.second.getGlobalBounds();
if(sprite.contains(mousepos.x,mousepos.y))
{
return it.first;
}
}
}
}
}
修改
这个function
在while循环中运行。
window
是sf::RenderWindow
。
event
是sf::Event
。
if(openmenu)
{
options.showMenu(&window); //This draws to the renderwindow
if(options.buttonPress(&window, &event) == "Exit")
{
openmenu = false;
window.close();
}
}
答案 0 :(得分:1)
如果事件队列中没有MouseButtonPressed
事件(我希望大多数迭代都是这种情况),或者如果存在,则鼠标位置不在你的按钮,你的函数不返回值,导致未定义的行为。