![]() Pobierz kod Izometria w świecie prostokątnym- część 4 |
|
KOLIZJA W WARSTWIE- IZOMETRIA W ŚWIECIE PROSTOKĄTNYM- CZEŚĆ 4 W tej części zamierzam omówić model wykrywania kolizji w gigantycznych warstwach światach gry 2D. Jest to podejście opierające się na przykładzie kolizji dołączonej do pakietu Omegi. Tak, więc nic nowatorskiego. No może poza jednym pomysłem, który decyduje o prędkości wykonywania kodu gry. I to jest celem tego pomysłu. Ale po kolei. Poniżej fragment miejsca w świecie 2D gdzie dochodzi do kolizji Tu chciałbym zwrócić uwagę, że można wirujące maczugi potraktować jak obiekty statyczne- bez możliwości ruchu po planszy i problem kolizji rozwiązać inaczej. To znaczy w standardowy sposób. Ja zdecydowałem się na inny pomysł. Pomysł, dzięki, któremu jest znaczy zysk na czasie. Pytanie: Na czym polega oszczędność czasu? W zegarze gry są takie linie kodu: linia OmegaSprite1.Collision, wymusza wykonanie testu kolizji dal wszystkich obiektów klasy TSprite i jego potomków, które mają ustawioną flagę testu kolizji Oczywiści można wymusić kolizję na pikselach: Taki test kolizji prawidłowo jest wykonywany tylko w części widocznej świata gry - obszar ekranu. Obiekty mogą być i poza ekranem. Stąd ograniczenie długości listy obiektów TSprite do sprawdzenia przyczyni się do wzrostu FPS. Można, więc przerzucać informację czy w danej klatce warstwy należy wykonać test kolizji. Jest to nadal pomysł "taśmociągu" opisanego u podstawy gigantów świata 2D. Czyli dla przypomnienia przenosimy w ograniczonym obszarze klatek grafikę plus kolizję z ogromnej mapy świata gry. Wzrokowo można prześledzić przerzucanie flagi kolizji w kaflach warstwy, jeżeli w tej procedurze usuniemy klamry blokujące wykonanie linii if DoCollision then Wówczas warstwa pierwsza będzie informować tekstem czy dany obiekt- obraz w tej warstwie ma być poddany testowi kolizji. Informacja to słowa: "Tak/ Nie" Tu proszę pamiętać, że w opisywanym modelu świata, kolizja wykonywana też jest na zasadzie zadawania pytania: Czy można wejść żywym obiektem do danej klatki? Opisywałem to w poprzednich częściach- pola drogi, które dla przypomnienia w edytorze gry zaznaczone są kolorem czerwonym. Takie podejście zapewnia nam prawidłowo wykrywanie przejść itp. w części niewidocznej gry na przykład dla automatów. Przerzucanie flagi kolizji Jest zorganizowane w tym samym miejscu, co przerzucanie obrazów. Wystarczy wzbogacic poniższą procedurę o linie zdejmowania/ ustawiania flagi kolizji. Patrz pierwsza i ostatnia linia w poniższej procedurze Reakcja duszka na kolizję Dla potrzeb artykułu jest to najprostsze zdarzenie, jakie sobie można wyobrazić w wyniku wykrycia kolizji. Polega ono na cofnięciu obrazu duszka w kierunku odczytanym na podstawie bieżącej klatki animacji, ale o zwrocie przeciwnym do zwrotu patrzenia duszka. Wykonuję to w tej procedurze Procedura nie jest dopracowana, ale ogólny model przerzucania kolizji w klatkach warstwy został przedstawiony. I to by było na tyle Do prawidłowego działania przykładu wymagane są te pliki swiat_512x384.mue2D kasztan.oil teren_rosliny.oil swiatynie.oil zamki.oil pierwotny001.oil wiatrak.oil mlyn.oil D3DX81AB.DLL MPPSDK.DLL |
