Миші приціліться в FPS


38

Я хотів би зробити шутер від першої особи та перемістити камеру за допомогою миші. Проблема полягає в тому, що коли курсор досягне меж екрана, камера більше не повернеться. Як я можу тримати мишу в центрі і в будь-якому випадку виявляти її рухи?


3
Це чудове питання.
Качка комуніста

Відповіді:


39

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

Ви можете зробити те ж саме в XNA, ви просто працюєте з трохи іншим інтерфейсом. Тож ви можете зробити щось на кшталт:

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

РЕДАКТУВАННЯ. Ось також підручник, який я розкопав за допомогою пошуку в Google для "відносного введення миші XNA" (це те, про що ви питаєте). Я думаю, це трохи старе, тому деякі методи можуть змінити їх назви, але поняття все-таки повинні застосовуватися.

EDIT 2: Призначений , щоб сказати «обробки цього в Win32» і не «обробки цього є Win32," оновлені відповідним чином .


Велике спасибі. це саме те, що я шукав! ;)
BlackBear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.