2014-02-04 5 views
0

Im пытается создать размещение блоков с привязкой к сетке. Все работает, и в моей голове это должно обновить положение мыши относительно окна в каждом кадре правильно?Положение мыши с прокруткой экрана в SFML

sf::Vector2i position = sf::Mouse::getPosition(window.mywindow); 

//get position 
int xSnap = (position.x/gridWidth) * gridWidth; 
int ySnap = (position.y/gridHeight) * gridHeight; 

Но я также экран прокрутки с помощью

if (player.playerSprite.getPosition().x + 16 > screenDimensions.x/2) 
     position.x = player.playerSprite.getPosition().x + 16; 
    else 
     position.x = screenDimensions.x/2; 

    //Y 
    if (player.playerSprite.getPosition().y + 16 > screenDimensions.y/2) 
     position.y = player.playerSprite.getPosition().y + 16; 
    else 
     position.y = screenDimensions.y/2; 

Когда экран прокручивается либо путь от своего первоначального положения оно не обновлять позицию мыши, так, например, позволяет сказать, что размер окна 800х600, в этом окне 800x600 позиция работает нормально, но позволяет сказать, что мой спрайт перемещается на 200 пикселей справа (он начинает прокручиваться, когда спрайт достигает середины экрана) за исходную позицию, объект im, размещающий с использованием этого кода, затем появляется на 200 пикселей слева мышь. То же самое происходит с осью y.

Я надеюсь, что имеет смысл

+0

В чем вопрос? – OlivierH

ответ

3

Вам нужно позвонить window.mapPixelToCoords(), чтобы превратить вашу позицию пикселя в системе координат вашей точки зрения.

sf::Vector2i pixel_pos = sf::Mouse::getPosition(window.mywindow); 
sf::Vector2f coord_pos = window.mywindow.mapPixelToCoords(pixel_pos); 

И как общий совет: Не использовать членов общественного класса - mywindow и playerSprite не должны быть доступны извне.

+0

Спасибо, что, похоже, работает, однако я больше не получаю привязку к функции сетки, она просто следует за мышью, а не щелчком. любые идеи почему? – Mystic

+0

Скорее всего потому, что 'position' не является' sf :: Vector2 ', таким образом, разделение будет делением' float', и окончательный результат будет передан (с предупреждением) при назначении. Возможно, вы захотите использовать 'static_cast (position.x)'. Я также советую вам использовать векторы вместо двух переменных x и y. – Lukas

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