Karakter / nesne etkileşimi animasyonları izometrik oyunlarda nasıl çalışır?


10

Oyuncunun masalar, yazı tahtaları vb. Olağan mobilyalarla bir ofis gördüğü bir izometrik iş simülasyon oyunu planlıyorum.

Oyundaki karakterler (Personel / NPC'ler), masada klavyede yazmak veya beyaz tahtada yazmak gibi önceden tanımlanmış bazı görevleri yerine getirerek bu nesnelerle etkileşime girmelidir.

Özellikle ilgilendiğim şu senaryo:

Karakter ofis (1) boyunca masasına (2) hareket eder ve oturur ve yazmaya başlar (3).

Anladığım kadarıyla karakter hareketi (1) için bir hareketli grafik sayfası ve masa (2) için statik bir hareketli grafik olacaktı ama üçüncü adımın nasıl ele alınacağını tam olarak anlamıyorum?

Hem masa hem de karakter içeren kombine bir hareketli grafik var mı? Sanmıyorum, aksi takdirde her masa ve karakter kombinasyonu için bir sprite sayfasına ihtiyacım olacak.

Bu normal olarak nasıl ele alınır?

DÜZENLE:

İşte oyun Tema Hastanesi'nden belirli bir örnek animasyon. Videoyu burada görebilirsiniz .

Görebildiğim kadarıyla animasyon birkaç adıma ayrılmıştır.

Adım 1 - Karakter masa ve sandalye arasında hareket eder.

resim açıklamasını buraya girin

Bu, sandalye ve masaların aslında ayrı spritelar olduğunu göstermektedir.

Adım 2 - Karakter animasyon oturur

resim açıklamasını buraya girin

En son çerçevede sandalyenin masaya nasıl daha yakın olduğuna dikkat edin.

Adım 3 - Masa animasyonları

resim açıklamasını buraya girin

Adım 4 - Animasyonu aç

Oturmakla aynıdır ancak tersine oynanır.

Adım 5 - Uzaklaşın

Uzaklaşmak için normal taşıma animasyonunu kullanın.

Sorularım, bu animasyonlar en iyi nasıl ayrılır ve bir grafik sanatçısı genellikle bu animasyonları nasıl sağlar?

Masada oturan ve yazılan karakter aslında üç farklı sprite mı (masa, karakter ve sandalye)? Herkes benzer animasyon sprite örnek biliyor mu?

DÜZENLEME 2:

Sanırım en büyük endişem, spriteların gerçekte nasıl görüneceğine dair doğru beklentilere sahip olmam. Onları kendim çizemiyorum, bu yüzden bunu yapmak için birine ödeme yapmam gerekecek ve bu tür animasyonları yapmanın en iyi uygulama yollarının olduğunu varsayıyorum?

Yanıtlar:


8

Kısa cevap? Spriteları birleştirmeyin.
Yani, birleştirirseniz, her bir kombinasyon için animasyona sahip olmanız gerekir. Sadece bir sandalye istiyorsan garip görünüyor. Ama sandalyelerin şimdi bir sprite daha güzel olduğu orta oyunda ofisinizi genişletebilir gibi davranalım. Bir sandalye sprite ekler misiniz, yoksa her işverenin tüm animasyonunu tekrar birleştirir ve ekler misiniz?

Bazı hesaplamalar yapalım.

Bir animasyon yazarak oturan bir işverende 6 sprite olduğunu, 5 farklı sandalyeniz ve 10 farklı işveren tipiniz olduğunu varsayalım.

İşvereni sandalyenin üstüne çizerseniz, bu 10 * 6 + 5 sprite, 65 sprite alır.
Eğer birleştirir ve her kombinasyonu yaparsanız, bu 10 * 6 * 5 sprite, yani 300 sprite alır. Sadece basit bir animasyon için bu kadar büyük bir spritesheet yapmak için böyle bir acı olacak!

DÜZENLE:

Nasıl yapılacağını bilmiyorsanız, sandalyenizi bir arka plan olarak ve personeli aktif sprite olarak tanımlamak daha iyi olacaktır. Sizin için daha kolay.

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

Bu, personelinizi chais'inizden ayrı tutmalıdır (arka plan) Ayrıca, personel animasyonunun karelerini de tamamen güncelleyin.

EDIT2:

Düzenlemenizi ve örneklerinizi gördüm. Aynı yaklaşımı sürdürürdüm. Tüm farklı spritelar. Sandalye yine de karakterin önüne giderdi!

Koltuğu yaklaştırmak için, konumunu bazı pikselleri yukarı ve sola güncelleyin veya bunu hareketli grafiğin kendisinde yapın.

Z align hakkında ne düşünüyorsunuz? birçok şey oynamalı ...

Sandalyenin bazı bölümlerinin karakterin arkasında kaldığını, diğerlerinin önünde göründüğünü görebilirsiniz. Öyleyse, sadece bir sprite ise bu nasıl mümkün olabilir? Z hizala!

Etkiyi elde etmenin iki yolu. Bir maske tutun (o kadar kolay değil) veya hareketli grafiğinizi ikiye bölün.

Şimdi çok fazla zamanım olmadığı için ikinci metoddan bahsedeceğim. Önünüzdeki parçalarda ve arkasında ne olacaksa, sandalye spriteınızı kesmelisiniz. Sonra onları aynı pozisyona getirin. kolay! Burada oynayan Z Align, Arkasındaki parçalar arkada çizilmeli, ortadaki karakter ve öndeki ön koltuk parçaları.

Hangi lib / api / sdk / toolset kullandığınızı bilmiyorum. Ama en çok bu şekilde: neyin arkasında veya neyin önünde olduğunu belirleyen az Align faktörünü kullanın veya Önce neyin çekildiğini, neyin en son çekildiğini öne çıkarın. Yani bunu aklınızda tutmalısınız.


Evet teşekkürler. Ben de öyle düşündüm ama o zaman animasyonların nasıl başarılacağını anlamıyorum. Bakabileceğim bir örnek biliyor musun? bu en iyi olurdu!
Patrick Klug

Kod mu yoksa oyun mu demek istiyorsun? Bir oyun istiyorsanız, Android ve iOS için Kairosoft tarafından geliştirilen Game Dev Story'yi görmeye çalışın. Kod örneği bilmiyorum ...
Gustavo Maciel

Yanıt revize edildi. İhtiyaçlarınıza uygun olup olmadığına bakın (:
Gustavo Maciel

Sorumu belirli bir örnekle güncelledim. Spriteların nasıl görüneceğine veya grafik sanatçılarının sağlamak için ne kullandığına gerçekten ilgi duyuyorum. GameDev Story'nin animasyonları aklımdakiler için biraz fazla basit.
Patrick Klug

Edit 2'yi okuyun, cevabı geliştirdim, umarım ihtiyaçlarınızı karşılar.
Gustavo Maciel

2

Alternatif bir fikir, spritelarınıza 3D API'lerin (OpenGL) çokgenlerin örtüşmemesini sağlamaya benzer bir Derinlik / Z Tamponu görüntüsü eklemek olabilir. Temel bir sprite oyunu için bu sadece 0/1 bitlik bir grup olabilir (siyah beyaz bitmap) (isterseniz daha fazla derinlik seviyesi kullanabilirsiniz).

Kombine bir 'masa sandalye' sprite'ınız varsa ve sandalyenin o meydandaki diğer spriteların (yani insanlar) önünde görünmesini istiyorsanız, masa 'beyaz' olurken 'siyah' karakterinin Z-Buffer versiyonunu yaparsınız. .

Bu döşemede dinamik hareketli grafiği (kişi) oluşturduğunuzda, derinlik arabelleğinde hangi rengin olduğunu kontrol eder. 0 (siyah) pikseller için, kişi piksel çizer ve sandalyeyi orada bırakır.

Her piksel 1'i bir seferde kontrol etmek yerine, kontrolü yapmanın daha basit bir yolu, daha yakın derinlik 0 olacağı ve iptal edileceği için hareketli pikselleri derinlik tampon değeri ile çarpmak olacaktır. Daha sonra elbette colorkey tuşuna basmalısınız (alfa renk kanalınız yoksa).

Bu tabii ki ek yük ekler (bir masa gibi birden fazla derinlik seviyesine ihtiyaç duymayan bir şey için atlayabilirsiniz). Ayrıca animasyonlarınızı senkronize etmeniz gerekir (yani kişinin masa sandalye animiyle eşleşmesi gerekir). Size sadece bir sürü ayrı sprite sahip olma esnekliğini vermez.


Düzenlememde bahsettiğim maske ile derinlik katmanı (:
Gustavo Maciel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.