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는 0 또는 1 그것은 창을 닫지하고 내가 왜 모르는 reutrns 때 내가 여기에 일부 붙여 작동하지 않습니다?

+0

그리고 나는 sfml 2.0을 가지고있다. –

답변

0

당신의 문제는 당신이 위치를 x 좌표와 높이와 비교한다는 것입니다. .

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

여전히 작동하지 않는다. 나는 가장 자리를 바꾼다. –

+0

@Itsmeyxc - 처음에는 어디에서 오는가? -'if (y <= 770)'브랜치를 입력 하시겠습니까? 둘째,'MouseOnDot()'이 0 또는 1을 반환하는지 여부에 상관없이'if' 브랜치 외부에 있기 때문에'Game :: Spawn (renderWindow, ...)'를 호출하고 있습니다 .- 나는'Spawn() 너를위한 새로운 창 – Attila

2

김포 :: 마우스 ::에는 getPosition()를 사용하여 X 반환 위치 : 당신은 x와 X + 높이 (유사 y 좌표에 대한/폭)

시도 비교해야 바탕 화면을 기준으로, 당신은 당신이하는 것을 기준으로 할 경우 RenderWindow의 당신이 할 필요가 : SF :: 마우스 ::에는 getPosition (RenderWindow의를) 다음 아틸라 정확히 오른쪽 마우스/점의 비교에 관한

을 .X :)