鼠标位置并在sfml中单击检测

时间:2012-06-09 15:34:24

标签: c++ sfml

int Game::MouseOnDot(float x, float y, RenderWindow &renderWindow) {
    Rect<int> Dot;
    Event event;
    Dot.left = x;
    Dot.top = y;
    Dot.width = 20;
    Dot.height = 20;
    while (renderWindow.pollEvent(event)) {
        float Mx = sf::Mouse::getPosition().x;
        float My = sf::Mouse::getPosition().y;
        if (event.type == Event::MouseButtonReleased&&Mx > x && Mx < Dot.height && My > y && My < Dot.width){
                return 1;
        }
            else
                return 0;
    }
}

我不知道为什么如果在点上按下按钮它不起作用,它返回1,告诉其他功能关闭窗口。我在鼠标位置上做错了吗?

while (renderWindow.isOpen()) {
        processEvents(renderWindow);
        float Time = clock.getElapsedTime().asSeconds();
        float TimeDifference = Time - LastUpdateTime;
        if (TimeDifference >= UpdateTime) {
            processEvents(renderWindow);
            y += 3;
            if (y <= 770) {
                if(Game::MouseOnDot(x, y, renderWindow)==1)
                                    renderWindow.close();
                Game::Spawn(renderWindow, Green_Dots, x, y);
                LastUpdateTime = Time;
                return;

仍然无法正常工作我在MouseOnDot重新加载0或1时粘贴此处的部分。它不会关闭窗口,我不知道为什么?

2 个答案:

答案 0 :(得分:2)

使用 SF ::鼠标::为getPosition()。X 返回相对于桌面的位置,如果你想要它相对于你需要做的renderWindow: SF ::鼠标::为getPosition(RenderWindow的).X

然后Attila完全正确的鼠标/点比较:)

答案 1 :(得分:0)

我认为您的问题是您将位置与x坐标和高度进行比较。您需要比较x和x +高度(类似于y坐标/宽度)

尝试:

if (event.type == Event::MouseButtonReleased && 
    Mx > x && Mx < x + Dot.height &&
    My > y && My < y + Dot.width) {
  //...
}