我使用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