Celowanie myszką w FPS

38

Chciałbym zrobić strzelankę z perspektywy pierwszej osoby i przesunąć kamerę za pomocą myszy. Problem polega na tym, że gdy kursor osiągnie granice ekranu, kamera nie będzie się już obracać. Jak mimo to utrzymać mysz w środku i wykryć jej ruchy?

Czarny niedźwiedź
źródło
3
To świetne pytanie.
Kaczka komunistyczna

Odpowiedzi:

39

Ogólne podejście do obsługi tego w klasycznym programowaniu Win32 polega na uchwyceniu delty myszy w każdej ramce, a następnie zresetowaniu pozycji myszy do środka ekranu. Oczywiście chcesz też, aby kursor myszy był niewidoczny, ponieważ w przeciwnym razie sprawy wyglądają brzydko.

Możesz zrobić to samo w XNA, po prostu pracujesz z nieco innym interfejsem. Więc możesz zrobić coś takiego:

  1. Podczas uruchamiania ustaw pozycję myszy na środku ekranu za pomocą Mouse.SetPosition .
  2. Również podczas uruchamiania uczyń mysz niewidoczną .
  3. Każda ramka wejściowa, chwyć bieżący stan myszy .
  4. Ponieważ wiesz, że mysz była w środku, możesz użyć bieżących wartości X i Y z obiektu MouseState odzyskanego w kroku # 3, aby obliczyć ruch delta w obu wymiarach. Możesz podać te delty do reszty logiki gry, takiej jak (w twoim przypadku) kod kamery.
  5. Zresetuj mysz do środka ekranu przed przejściem do następnej klatki.

EDYCJA: Również tutaj jest samouczek, który wykopałem za pomocą wyszukiwarki Google dla „XNA względnego wejścia myszy” (o co pytasz). Myślę, że jest trochę stary, więc niektóre metody mogły mieć zmienione nazwy, ale koncepcje powinny nadal obowiązywać.

EDYCJA 2: Chcę powiedzieć „obsługa tego w Win32”, a nie „obsługa tego jest Win32”, odpowiednio zaktualizowana.

Josh
źródło
Dziękuję Ci bardzo. właśnie tego szukałem! ;)
BlackBear