我正在使用SFML库编写一款游戏。
我有一些按钮,当我点击它们时,我想要做一些事情。
但是我遇到了一个问题,我不知道如何检测单击事件,而不是键盘按下或释放事件。
我编写了以下代码:
游戏循环:
例如,当我点击“播放”按钮时,将调用此方法:
函数调用次数过多。
void GameEngine::gameLoop()
{
Menu menu(_win);
while (_win.isOpen() && gl_quit == false)
{
sf::Event event;
while (_win.pollEvent(event))
{
if (event.type == sf::Event::Closed)
_win.close();
}
menu.mouseEvent(event);
menu.keyboardEvent();
menu.calcul();
menu.reDraw();
_win.display();
_win.clear();
}
}
Menu.cpp
bool Menu::mouseEvent(sf::Event &event)
{
if (event.type == sf::Event::MouseButtonReleased)
{
if (event.mouseButton.button == sf::Mouse::Left)
{
for (std::map<std::string, Button *>::iterator it = _buttons.begin();
it != _buttons.end(); ++it)
{
if (it->second->collide(sf::Mouse::getPosition(_win)))
(this->*(it->second->getAction()))();
}
}
}
}
例如,当我点击“播放”按钮时,将调用此方法:
void Menu::on_Jouer_clicked()
{
std::cout << "fct jouer" << std::endl;
}
这是控制台中的结果:
~/Projet/gametest :./game
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
fct jouer
函数调用次数过多。