2012-06-09 2 views
0
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, которая сообщает другой функции о закрытии окна. Я что-то делаю неправильно в положении мыши?Положение мыши и щелчок в sfml

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 reutrns 0 или 1. Это не будет закрывать окна и я не знаю, почему ??

+0

И я - usnig sfml 2.0 –

ответ

0

Я думаю, ваша проблема в том, что вы сравниваете положение с координатой x и высотой. Вам нужно сравнить с й и х + высоты (аналогично для координаты/ширины)

Try:.

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

все еще не работает Посмотреть сверху i eddited post –

+0

@Itsmeyxc - во-первых, откуда вы? - вы уверены, что входите в 'if (y <= 770)' ветку? Во-вторых, если 'MouseOnDot()' возвращает 0 или 1, вы вызываете 'Game :: Spawn (renderWindow, ...)' независимо от того, что он находится вне ветки 'if'. Я предполагаю, что' Spawn() 'будет создавать новое окно для вас – Attila

2

Использование НФА :: Мыши :: GetPosition() х возвращают позицию по отношению к рабочему столу, если вы хотите его по отношению к вашему RenderWindow вам нужно сделать: НФ :: мыши :: GetPosition (RenderWindow) .x

тогда Аттила точно правы мыши/точка сравнения:)

 Смежные вопросы

  • Нет связанных вопросов^_^