Цель мыши в FPS

38

Я хотел бы сделать шутер от первого лица и двигать камеру мышью. Проблема в том, что когда курсор достигает границ экрана, камера больше не поворачивается. Как я могу держать мышь по центру и обнаруживать ее движения в любом случае?

Черный медведь
источник
3
Это большой вопрос.
Коммунистическая утка

Ответы:

39

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

Вы можете сделать то же самое в XNA, вы просто работаете с немного другим интерфейсом. Так что вы можете сделать что-то вроде:

  1. При запуске установите положение мыши в центр экрана с помощью Mouse.SetPosition .
  2. Также при запуске сделайте мышь невидимой .
  3. Каждый входной кадр захватывает текущее состояние мыши .
  4. Поскольку вы знаете, что мышь была в центре, вы можете использовать текущие значения X и Y из объекта MouseState, который вы восстановили на шаге № 3, чтобы вычислить дельта-движение в обоих измерениях. Вы можете передать эти дельты остальной части игровой логики, такой как (в вашем случае) код камеры.
  5. Установите мышь в центр экрана, прежде чем переходить к следующему кадру.

РЕДАКТИРОВАТЬ: Кроме того, вот учебник, который я выкопал с помощью поиска Google для «относительного ввода мыши XNA» (о чем вы спрашиваете). Я думаю, что он немного староват, поэтому некоторые методы, возможно, изменили свои имена, но концепции все еще должны применяться.

EDIT 2: Предназначенный , чтобы сказать «обработки этого в Win32» и не «обработки этого является Win32,» обновлены соответствующим образом .

Джош
источник
Большое спасибо. это именно то, что я искал! ;)
BlackBear