Tworzę strzelankę 2D z przewijaniem bocznym i mam mały problem z wykrywaniem kolizji pocisków. Wszystko, w tym pociski, to obiekty z własnymi wielokątami / metodami aktualizacji.
Problem polega na tym, że pociski poruszają się szybko, a przy 60 klatkach na sekundę (w co gra) pocisk często przeskakuje przez ścianę - ponieważ przesuwa się ona ponad szerokość ściany podczas przerwy między aktualizacjami - i kontynuujcie z radością, ponieważ wielokąty nigdy tak naprawdę się nie pokrywają.
Co mogę z tym zrobić? Jedyne, co udało mi się wymyślić, to narysować linię ze starej pozycji do nowej pozycji i wykonać na niej wykrywanie kolizji, ale dokumentacja slick2d zaleca się rysowanie linii do wykrywania kolizji. Jak mogę to rozwiązać?
Odpowiedzi:
Standardowe podejścia to (wybierz jedno):
W tym przypadku możesz zamiast tego modelować swoje kule jako promienie - jeśli pasuje to do wyglądu Twojej gry, tak jak w left4kdead . W ten sposób nie musisz przybliżać pocisków jako promieni, ponieważ one już są promieniami. Z punktu widzenia wyglądu może to wyglądać przyzwoicie, jeśli narysujesz linię jaśniejszym punktem na końcu pocisku lub po prostu narysujesz linię jako gradient od światła (koniec pocisku) do ciemności (koniec ogona), nadając mu wygląd ruch.
Zgadzam się, że w większości przypadków używanie grafiki do wykrywania kolizji jest nieco mylące, jednak detekcja kolizji w pikselach jest dokładnie taka i jest przyjętą techniką. Myślę, że wszystko zależy od tego, co chcesz osiągnąć i jak szybko. Jeśli nie potrzebujesz bardzo szybkiej gry z wieloma ciałami i akcją, wybierz ją. Lepiej skorzystaj z jednego z podejść opisanych powyżej.
źródło
Jeśli chcesz, aby twoje pociski zachowywały się jak realistyczne obiekty fizyczne (np. Twoje pociski bardziej przypominają strzały lub kamienie z katapulty niż ostrzał z broni palnej), możesz również spróbować zwiększyć częstotliwość aktualizacji fizyki.
Tak więc, podczas gdy twoja gra może działać z 60 klatkami na sekundę, twoja symulacja fizyczna może działać przy 120 aktualizacjach na sekundę (oto wszechobecny artykuł dotyczący timepeptera, który wyjaśnia dobrą konfigurację fizyki, która może działać z inną prędkością niż pętla renderowania).
Oczywiście zwiększenie interwału aktualizacji silnika fizyki spowoduje większe obciążenie procesora. To podejście jest sensowne tylko wtedy, gdy twoje pociski nie poruszają się bardzo szybko (co zakładałem, ponieważ jesteś w stanie stwierdzić, że twoje pociski poruszają się po łuku).
źródło