Planuję izometryczną grę biznesową, w której gracz widzi biuro ze zwykłymi meblami, takimi jak biurka, tablice itp.
Postacie (personel / NPC) w grze powinny wchodzić w interakcje z tymi obiektami, wykonując niektóre z góry określone zadania, takie jak pisanie na klawiaturze przy biurku lub pisanie na tablicy itp.
W szczególności interesuje mnie następujący scenariusz:
Postać przesuwa się przez biuro (1) na biurko (2), siada i zaczyna pisać (3).
Z tego, co rozumiem, miałbym arkusz sprite'a dla ruchu postaci (1) i statyczny sprite dla biurka (2), ale nie do końca rozumiem, jak można postępować z trzecim krokiem?
Czy istnieje połączony duszek, który zawiera zarówno biurko, jak i postać? Zakładam, że nie, w przeciwnym razie musiałbym mieć arkusz sprite dla każdego połączenia biurka i postaci.
Jak się to normalnie obchodzi?
EDYTOWAĆ:
Oto konkretna przykładowa animacja z gry Theme Hospital. Możesz zobaczyć wideo tutaj .
O ile widzę, animacja jest podzielona na kilka kroków.
Krok 1 - Postać porusza się między biurkiem a krzesłem.
Sugeruje to, że krzesło i biurko są w rzeczywistości osobnymi duszkami.
Krok 2 - Postać siada animacja
Zwróć uwagę, że w ostatniej ramie krzesło znajduje się bliżej biurka.
Krok 3 - Animacje na biurku
Krok 4 - Wstań animacja
To tak samo, jak usiąść, ale gra się w odwrotnej kolejności.
Krok 5 - Odejdź
Użyj normalnej animacji ruchu, aby się odsunąć.
Mam pytania, w jaki sposób najlepiej rozdzielić te animacje i w jaki sposób grafik zazwyczaj zapewnia te animacje?
Czy postać siedzi i pisze na biurku w rzeczywistości trzy różne duszki (biurko, postać i krzesło)? Czy ktoś zna jakieś sprite'y podobnych animacji?
EDYCJA 2:
Myślę, że moim największym zmartwieniem jest to, że mam właściwe oczekiwania co do tego, jak będą wyglądać duszki. Nie mogę ich narysować, więc będę musiał zapłacić komuś za zrobienie tego i zakładam, że istnieje jakaś najlepsza metoda wykonywania tego rodzaju animacji?
Alternatywnym pomysłem byłoby dołączenie do buforów obrazu Depth / Z Buffer, podobnie jak interfejsy API 3D (OpenGL) zapewniają, że wielokąty się nie pokrywają. W przypadku podstawowej gry sprite może to być po prostu bit 0/1 bitów (czarno-biała mapa bitowa) (chociaż możesz użyć większej ilości głębi, jeśli chcesz).
Jeśli masz połączoną duszkę „na biurko” i chcesz, aby krzesło pojawiło się przed innymi duszkami (tj. Ludźmi) na tym kwadracie, możesz ustawić wersję char Z w buforze Z na „czarną”, a biurko na „białą” .
Gdy wyrenderujesz dynamicznego duszka (osobę) na tym kafelku, sprawdzi, czy kolor jest w buforze głębokości. W przypadku pikseli, które są 0 (czarne), pomijasz rysowanie pikseli osoby i po prostu zostawiasz tam krzesło.
Zamiast sprawdzać każdy piksel 1 na raz, prostszym sposobem na sprawdzenie byłoby pomnożenie pikseli duszka przez wartość bufora głębokości, ponieważ bliższa głębokość wynosiłaby 0 i anulowanie. Potem oczywiście musisz colorkey (chyba że masz kanał koloru alfa).
To oczywiście dodaje koszty ogólne (chociaż można to pominąć w przypadku wszystkiego, co nie wymaga wielu poziomów głębokości, np. Krzesła biurowego). Musisz także zsynchronizować swoje animacje (tj. Osoba będzie musiała dopasować się do animacji krzesła biurkowego). To nie daje takiej samej elastyczności, jak posiadanie całej gamy osobnych duszków.
źródło