Положение мыши меняется при щелчке/нажатии клавиш?

Итак, в настоящее время я разрабатываю свою первую игру (и приложение на C++) в качестве хобби, но столкнулся с проблемой и не знаю, как ее обойти. Любая помощь, конечно, приветствуется.

Моя проблема заключается в следующем:

Всякий раз, когда я нажимаю или нажимаю клавишу на клавиатуре, координаты мыши перескакивают на действительно странные значения, а затем возвращаются к норме через секунду. Это портит мои векторные расчеты для траекторий пуль и т. д.

Пример: http://puu.sh/3xjFq.jpg

Как вы можете видеть в моем окне консоли, координата Y прыгает с правильного значения (628) на (-858993460), затем на (65536), затем снова на правильное значение.

Код, который я использую для получения координат мыши:

cout << "X: " << event.mouseMove.x << " Y: " << event.mouseMove.y << endl;

Это тот же самый код, который я использую для получения координат мыши для вычислений.

Я предполагаю, что источником моей проблемы является сам SFML и то, как он работает. Что может быть альтернативой для получения координат мыши?

Обратите внимание, что я все еще очень новичок в этом (начал на прошлой неделе), поэтому постарайтесь, чтобы все было как можно проще.

Любая помощь приветствуется, спасибо!


person user2558804    schedule 07.07.2013    source источник
comment
Это код для печати координат мыши. Где весь код для получения координат?   -  person Captain Obvlious    schedule 08.07.2013


Ответы (1)


События хранятся в объединении в SFML. Если вы не знаете, как работают профсоюзы, обязательно прочитайте об этом (Википедия). Одним словом, разные переменные занимают одно и то же место в памяти. Это, очевидно, дает вам странные значения при их интерпретации с неправильным типом.

Когда вы пишете:

event.mouseMove.x/y

значения членов x или y действительны только в том случае, если событие, которое вы просматриваете, является sf::Event::MouseMoved. Если вы хотите проверить координаты мыши при нажатии кнопки (то есть событие типа sf::Event::MouseButtonPressed), вы должны использовать

event.mouseButton.x/y
person teh internets is made of catz    schedule 07.07.2013
comment
Однако event.mouseButton.x и event.mouseButton.y не являются допустимым кодом SFML. - person user2558804; 08.07.2013
comment
@ user2558804 Да, посмотрите этот учебник: sfml-dev.org/tutorials /2.0/окно-события.php - person teh internets is made of catz; 08.07.2013
comment
А, кажется, теперь я понимаю. Но что мне делать с нажатиями клавиш? Нет ли другого способа получить положение мыши, не прибегая к методу объединения, который использует SFML? - person user2558804; 08.07.2013
comment
@user2558804 user2558804 Классический способ — использовать переключатель для определения типа события, как в руководстве (первый пример кода). Вы также можете получить фактическое состояние мыши следующим образом ( sfml -dev.org/tutorials/2.0/window-inputs.php#mouse). ИМХО, вы должны прочитать эти 2 руководства, так как они являются очень базовыми, и их нужно хорошо понимать. - person teh internets is made of catz; 08.07.2013