How can I get clickable buttons working in SFML? I've failed figuring it out on my own. At first I tried just putting in text and then I tried an image for the Exit button. Neither of them work in the sf::Event::MouseMoved event. I want the exit button to highlight a different color when I mouse over it but it just flickers every time the mouse moves whether its in the coordinates or not. Also, doing a sf::FloatRect = exitButtonImage.getRect(); seems to not work either.
#include <SFML\Graphics.hpp>
#include <SFML\Audio.hpp>
#include <string>
#include <iostream>
int main()
{
sf::RenderWindow window(sf::VideoMode(1024, 622), "Survival Game", sf::Style::Default);
sf::Texture background;
sf::Sprite backgroundImage;
if (!background.loadFromFile("Alaskan Wilderness.png"))
std::cout << "Error: Could not display Alaskan Wilderness image" << std::endl;
backgroundImage.setTexture(background);
while (window.isOpen())
{
sf::Font font;
if (!font.loadFromFile("MATURASC.TTF"))
std::cout << "Can't find the font file" << std::endl;
sf::Texture exitButton;
sf::Sprite exitButtonImage;
if (!exitButton.loadFromFile("Exit Button.png"))
std::cout << "Can't find the image" << std::endl;
exitButtonImage.setPosition(50.0f, 500.0f);
float exitButtonWidth = exitButtonImage.getLocalBounds().width;
float exitButtonHeight = exitButtonImage.getLocalBounds().height;
exitButtonImage.setTexture(exitButton);
sf::Text startText;
startText.setFont(font);
startText.setStyle(sf::Text::Bold);
startText.setString("Create New Game");
startText.setFillColor(sf::Color::Black);
startText.setCharacterSize(48);
startText.setPosition(50.0f, 320.0f);
sf::Text loadText;
loadText.setFont(font);
loadText.setStyle(sf::Text::Bold);
loadText.setString("Load Game");
loadText.setFillColor(sf::Color::Black);
loadText.setCharacterSize(48);
loadText.setPosition(50.0f, 380.0f);
sf::Text settingsText;
settingsText.setFont(font);
settingsText.setStyle(sf::Text::Bold);
settingsText.setString("Settings");
settingsText.setFillColor(sf::Color::Black);
settingsText.setCharacterSize(48);
settingsText.setPosition(50.0f, 440.0f);
sf::Event Event;
while (window.pollEvent(Event))
{
switch (Event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::MouseMoved:
sf::Vector2i mousePos = sf::Mouse::getPosition(window);
bool mousePositionExit = mousePos.x == exitButtonWidth && mousePos.y == exitButtonHeight;
if (sf::Mouse::getPosition(window).x > exitButtonImage.getGlobalBounds().left &&
sf::Mouse::getPosition(window).x < exitButtonImage.getGlobalBounds().left +
exitButtonImage.getGlobalBounds().width && sf::Mouse::getPosition().y >
exitButtonImage.getGlobalBounds().top && sf::Mouse::getPosition(window).y
< (exitButtonImage.getGlobalBounds().top + exitButtonImage.getGlobalBounds().height));
{
exitButtonImage.setColor(sf::Color(250, 20, 20));
window.draw(exitButtonImage);
}
break;
}
}
window.clear();
window.draw(backgroundImage);
window.draw(exitButtonImage);
window.draw(startText);
window.draw(loadText);
window.draw(settingsText);
window.display();
}
return 0;
}