使用SFML获取单击位置

时间:2014-09-05 17:20:59

标签: sfml

我目前正在学习SFML,并试图找出如何在bposX部分的bposYpollevent打印出点击区域的位置。这是我的代码:


sf::RectangleShape smallRectangle (float width = 1.0f, float height = 1.0f, 
                                sf::Vector2f position = sf::Vector2f(1.0f,1.0f),
                                const sf::Color& myFillColor = sf::Color(0,51, 51)
                                )
{
  sf::RectangleShape sboard;
  sf::Vector2f myRectangleSize(width, height);
  sboard.setSize(myRectangleSize);
  sboard.setPosition(position);
  sboard.setFillColor(myFillColor);
  return sboard;
}

case sf::Event::MouseButtonPressed:
                switch(event.mouseButton.button)
                    case sf::Mouse::Left:
                    {
                        float bposX = sboard.getPosition().x;
                        float bposY = sboard.getPosition().y;
                        cout << "Current Position : ";
                        cout << bposX << " " << bposY << endl;
                    break;
                    }   

for(int i=0; i < sgridSize; i++)
{
    for (int j = 0; j < sgridSize; j++)
    {
        window.draw(sgrid[i][j]);
        sf::FloatRect sgridBounds = sgrid[i][j].getGlobalBounds();
        if(sgridBounds.contains((sf::Vector2f)pointerPos))
        {
            shighlightCell.setPosition(sgrid[i][j].getPosition());
            window.draw(shighlightCell);
            if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
            {
                sgrid[i][j].setFillColor(sf::Color::Green);
            }
        }
    }
}

当我点击矩形时,它只显示1 1,基于我的Vector2f位置。

1 个答案:

答案 0 :(得分:0)

假设我正在正确阅读您的代码,sboardsf::RectangleShape。有可能你真的想要鼠标的位置,而不是这个矩形。鼠标位置通过静态函数sf::Mouse::getPosition()给出,它提供相对于桌面的坐标或sf::Mouse::getPosition(window),它将为您提供相对于sf::Windowsf::RenderWindow实例的鼠标位置。

我建议您在学习基础知识的同时阅读SFML网站上的教程。 This one is immediately useful