Jak działają animacje interakcji postaci z obiektami w grach izometrycznych?

10

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.

wprowadź opis zdjęcia tutaj

Sugeruje to, że krzesło i biurko są w rzeczywistości osobnymi duszkami.

Krok 2 - Postać siada animacja

wprowadź opis zdjęcia tutaj

Zwróć uwagę, że w ostatniej ramie krzesło znajduje się bliżej biurka.

Krok 3 - Animacje na biurku

wprowadź opis zdjęcia tutaj

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?

Patrick Klug
źródło

Odpowiedzi:

8

Krótka odpowiedź? Nie łącz duszków.
Oznacza to, że jeśli połączysz, będziesz musiał mieć animację dla każdej kombinacji. Wydaje się dziwne, jeśli chcesz tylko jedno krzesło. Ale udawajmy, że twoje biuro można rozbudować w środkowej grze, w której krzesła są teraz ładniejsze. Czy po prostu dodasz duszka na krześle, czy też połączysz ponownie i dodasz wszystkie animacje każdego pracodawcy?

Zróbmy trochę łydek.

Udawaj, że masz 6 duszków na animacji pisania pracodawcy, masz 5 różnych krzeseł i 10 różnych typów pracodawców.

Jeśli po prostu narysujesz pracodawcę na krześle, zajmie to 10 * 6 + 5 duszków, 65 duszków.
Jeśli połączysz i wykonasz każdą kombinację, zajmie to 10 * 6 * 5 duszków, czyli 300 duszków. Stworzenie tak dużego arkusza sprite'a dla prostej animacji będzie dla ciebie takim bólem!

EDYTOWAĆ:

Cóż, jeśli nie wiesz jak, lepiej zdefiniować swoje krzesło jako tło, a personel jako aktywne duszki. Łatwiej dla ciebie.

Background.draw();
Foreach(employer i in staff)
    I.draw();

To powinno oddzielić twoją laskę od twoich szajanów (tło) Również aktualizuj klatki animacji laski również niezależnie.

EDYCJA 2:

Widziałem twoją edycję i twoje próbki. Zachowałbym to samo podejście. Wszystkie różne duszki. Krzesło i tak pójdzie przed postacią!

Aby przesunąć krzesło bliżej, zaktualizuj jego położenie o kilka pikseli w górę i w lewo lub zrób to na samym duszku.

Czy rozumiesz wyrównanie Z? to powinno grać wiele rzeczy ...

Widać, że niektóre części krzesła pozostają za postacią, inne pojawiają się z przodu. Jak to możliwe, jeśli jest to tylko jeden duszek? Zrównaj!

Dwa sposoby na osiągnięcie efektu. Zachowaj maskę (nie tak łatwo) lub podziel duszka na dwie części.

Wspomnę tylko o drugiej metodzie, ponieważ nie mam teraz dużo czasu. Powinieneś przeciąć duszka na krześle, w częściach, które będą z przodu i co będzie z tyłu. Następnie umieść je w tej samej pozycji. łatwy! To, co gra, to wyrównywanie Z. Części z tyłu powinny być narysowane z tyłu, postać pośrodku, a części przedniego fotela z przodu.

Nie wiem, którego zestawu lib / api / sdk / zestaw narzędzi używasz. Ale najczęściej robią to w ten sposób: użyj az Wyrównaj czynnik, który określa, co jest za lub co jest z przodu lub Co jest losowane jako pierwsze, co jest losowane jako ostatnie. Więc powinieneś o tym pamiętać.

Gustavo Maciel
źródło
Tak, dziękuję. Też tak myślałem, ale nie rozumiem, jak wtedy byłyby animacje. znasz przykład, na który mógłbym spojrzeć? tak byłoby najlepiej!
Patrick Klug,
Masz na myśli kod lub grę? Jeśli chcesz grę, zobacz Game Dev Story autorstwa Kairosoft na Androida i iOS. Przykład kodu nie wiem ...
Gustavo Maciel
Odpowiedź poprawiona. Sprawdź, czy pasuje do twoich potrzeb (:
Gustavo Maciel
Zaktualizowałem swoje pytanie konkretnym przykładem. Naprawdę interesuje mnie, jak wyglądałyby duszki i jakich grafików używają. Animacje GameDev Story są nieco zbyt uproszczone jak na to, co mam na myśli.
Patrick Klug,
Czytaj Edytuj 2, poprawiłem odpowiedź, mam nadzieję, że pokrywa ona twoje potrzeby.
Gustavo Maciel
2

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.

David C. Bishop
źródło
Warstwa głębi z maską, o której wspomniałem w mojej edycji (:
Gustavo Maciel