我使用SFML库编码游戏。 我有一些按钮,当我点击时,我想要做点什么。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;
}
并且这是CONSOL中的结果:
~/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
该函数调用的次数太多。
你应该从一个更简单的例子/代码开始,比如一个简单的主要的精灵和没有什么奇特的东西。 – Hiura
我的示例代码太复杂了吗? – DeepSiderZ
您显示后立即清除屏幕。通常我认为你会清除屏幕,然后画出来然后显示。 – Galik