Gra 2D, część 6: Wykrywanie kolizji i obsługa jednostek

03.02.2010 - Marcin Milewski
TrudnośćTrudność

Czy wyobrażasz sobie platformówkę bez przeciwników albo bez pocisków? Przydałoby się też poruszanie po zaprojektowanym poziomie, prawda? W tym artykule nauczymy się jak wykrywać i obsługiwać kolizję między obiektami oraz w jaki sposób dodawać różne jednostki do gry.

Poprzedni artykuł - Odtwarzamy dźwięk Następny artykuł - Diabeł tkwi w szczegółach Pobierz początkowy kod źródłowy do tego artykułu.

Różne modele wykrywania kolizji

Zacznijmy od odpowiedzi na pytanie: czym jest wykrywanie kolizji i czy w ogóle jest potrzebne? W świecie rzeczywistym kolizje kojarzą się nam z czymś nieprzyjemnym i niepożądanym - np. kolizje drogowe. Natomiast w grach komputerowych jest to pojęcie bardziej ogólne. Powiemy, że dwa obiekty ze sobą kolidują, gdy ich graficzne reprezentacje na siebie nachodzą.

Jak w programie sprawdzić zachodzenie kolizji między dwoma obiektami? Można napisać algorytm, który z dokładnością co do piksela da poprawną odpowiedź. Będzie on jednak działał dosyć długo, a ponieważ w grze akcja zmienia się bardzo szybko, więc niepotrzebnie będziemy czekać na tę informację. Zamiast dokładnego wyniku wystarczy nam pewne przybliżenie. Zobaczmy jak możemy do tego celu wykorzystać znane wszystkim figury.

W najprostszej wersji do przybliżania obiektów możemy wykorzystywać okręgi. Obecność kolizji okrąg-okrąg możemy sprawdzić porównując odległość między środkami okręgów a sumą ich promieni. Czasem działają wręcz perfekcyjne (dla obiektów, które w przybliżeniu wyglądają jak koło czy elipsa), a czasem tragicznie - szczególnie dla podłużnych obiektów (np. igła).

Metoda ta choć bardzo prosta, to zupełnie nie sprawdzi się w naszym zastosowaniu. Każdy gracz natychmiast zauważy, że postać swoim zachowaniem przypomina poruszanie się po wyboistym terenie, mimo iż ten jest całkowicie płaski. Problem widać na poniższym obrazku, gdzie podłoże, po którym porusza się bohater zostało przybliżone przez okręgi:

A gdyby zamknąć obiekt w prostokącie? Czemu nie w wielokącie? Takie metody są faktycznie wykorzystywane. Uogólniają się nawet do przestrzeni trójwymiarowej (odpowiednio: okrąg - sfera, prostokąt - prostopadłościan, wielokąt - wielościan). Każdemu obiektowi przypisany jest kształt, który najlepiej go przybliża. Czasem jest to cała hierarchia kształtów: najpierw możemy sprawdzić czy zaszła kolizja okrąg - okrąg, a następnie piksel - piksel. Wybierając konkretne rozwiązanie należy wziąć pod uwagę zastosowanie metody, możliwości obliczeniowe oraz prostotę implementacji. W naszej sytuacji odpowiednim rozwiązaniem będą prostokąty. Dodatkowo będą one wyrównane (równoległe) do osi układu współrzędnych - w skrócie AABB (od ang. Axis-Aligned Bounding Box).

0
Twoja ocena: Brak

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com