SFMLでのマウスクリックの処理方法


SFML(Simple and Fast Multimedia Library)を使用してC++でマウスクリックを処理する方法について説明します。以下に、いくつかの方法と具体的なコード例を示します。

方法1: イベントループを使用する方法

#include <SFML/Graphics.hpp>
int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Mouse Click Example");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            if (event.type == sf::Event::MouseButtonPressed)
            {
                if (event.mouseButton.button == sf::Mouse::Left)
                {
                    int x = event.mouseButton.x;
                    int y = event.mouseButton.y;
                    // マウスクリックの座標(x, y)を使用して何か特定の処理を行う
                    // 例: クリックした場所にオブジェクトを描画するなど
                }
            }
        }
        window.clear();
        // ゲームやアプリケーションの描画などの処理を行う
        window.display();
    }
    return 0;
}

方法2: イベントコールバックを使用する方法

#include <SFML/Graphics.hpp>
void onMouseClick(sf::Event::MouseButtonEvent event)
{
    if (event.button == sf::Mouse::Left)
    {
        int x = event.x;
        int y = event.y;
        // マウスクリックの座標(x, y)を使用して何か特定の処理を行う
        // 例: クリックした場所にオブジェクトを描画するなど
    }
}
int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Mouse Click Example");
    window.setMouseCursorVisible(false); // マウスカーソルを非表示にする(任意)
    window.setActive();
    sf::Event event;
    while (window.waitEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
        if (event.type == sf::Event::MouseButtonPressed)
            onMouseClick(event.mouseButton);
        window.clear();
        // ゲームやアプリケーションの描画などの処理を行う
        window.display();
    }
    return 0;
}