Döşeme tabanlı oyunlarda duvar yapmak: Neyi özlüyorum?


25

Bugün fayans tabanlı oyunuma duvarların uygulanmasına ilişkin bazı notları not etmek için zaman harcadıktan sonra, daha önce hayal ettiğim kadar basit olmayacağını fark ettim. Yaptığım işin şu anki aşaması aslında duvarla ilgili bir kod oluşturmaya yakın olmasa da, bunu yapmak için üç farklı yöntem buldum. Şu anda, fikirlerimden hangisinin en iyi sonucu vereceğinden ve bir şeyi kaçırıp kaçırmadığımdan emin değilim.

Önemli: Bir karakter CAN biçimlerine aldırmaksızın, duvarları olan bir karo üzerinde durun.

Üç değişkenin tümü için ortak olan: tilemap tek boyutlu std :: vector (veya benzeri) tabanlı bir kapta "tutulur". Bunun nedenleri (açıkça) farklı bir sorunun cevaplarında açıklanmıştır.

Döşeme tabanlı oyunlarda konteyner sınıfları.

Duvarlara dönelim.

A) Basit yaklaşım.

Burada süslü bir şey yok. Her karo kabı yalnızca karakterleri değil , karo içindeki kenara tutturulmuş bir veya birkaç Duvar nesnesini tutabilir .

İlk yaklaşım

Artıları: Uygulaması kolay, motorda değişecek bir şey yok. Eksileri: İki şey. Bir - sadece kafamın içinde olabilir, ama bazı kombinasyonlar sadece çirkin görünüyor. İkincisi - bu yaklaşım iki bitişik karodan çift duvar yapılmasına izin verir. Bina, oyunun önemli bir parçası olacak ve çift duvarlar, inşaatçıların, duvarların malzemelerini oyun araçlarıyla yükseltmeyi muhtemel kılmalarını ve mevcut duvarı ikiye katlayarak daha fazla dayanıklılık elde etmelerini sağlar. Bu arzu edilmez. Tabii, çift cidarı yasaklayan bir prosedür de dahil edebilirim, ancak bunun için kötü bir his var.

B) Akıllı (?) Yaklaşım.

Oyuncuların tüm haritayı iki kat duvarla doldurmasına izin vermek yerine, onları yeneceğim. Her duvarın, karonun kenarına içeriden tutturulmuş iki yarısı vardır. Yani, tek bir "Duvar ünitesi" yapmak için, iki bitişik döşemede iki Yarım Duvar nesnesi oluşturmam gerekecek.

İkinci yaklaşım

Artıları: Simetrik !!! Ayrıca, mevcut motor özelliklerinde de önemli bir değişiklik yapılması gerekmez. Eksileri: Daha fazla güçlük, daha fazla nesne ve elbette "kapaklar". Resimde gördüğünüz gibi, bir köşe temelde bir "kapak" nesnesi için ağlayacak. Aslında onunla harikayım, eklemek çok zor değil. Hey, zaten bağlı dört kapaktan yapılmış ince sütunlar için bir planım var. Tatlı. Yine de, olası Görüş Alanı ve Görüş Hattı ile ilgili bazı endişelerim var.

C) Toplam revizyon çeşidi.

Ya da oyun nesneleri için ayrı kaplar olarak sadece sınır ve köşe oluşturabilirim. Aynen böyle.

Üçüncü yaklaşım

Artıları: Emin bile değil. Çok basit. Kesinlikle. Eksileri: Bir revizyon gerektirecektir. Kod değil, neyse ki, ama şu anki oyun mekaniği zihniyeti - bu kesin. Yararları çok açık değil. Ayrıca, bu yaklaşma iki öncekinden çok daha fazla kap gerektirmektedir . İndeksleme matematiği de biraz acı olacak.

Yani burada biz var - çini arasında duvar yapmanın üç farklı yolu. Dışarıda herhangi bir alternatif varsa, onları kontrol etmekten mutlu olurum. Görmedim yaklaşımların herhangi birinin yararları / çöküşleri varsa - lütfen belirtin.


2
A.2: A olarak, sadece iki tarafın - örneğin Kuzey ve Batı - bir duvarı olabilir. X-Com'un kullandığı yaklaşım budur.
Martin Sojka

@Martin Sojka Güneydoğu köşelerinde bir delik bırakır. Yine de, C modelini bu şekilde düşünmek faydalı olabilir, her kiremit üç farklı duvar elemanının bir kombinasyonuna sahip olabilir, hiçbir şey, batı ve kuzey-batı köşesi olabilir.
aaaaaaaaaaaa

Yani duvarlar görünür, anladın mı? Sadece fayansların kenarlarını tıkamak değil. B seçeneğinde neden iki yarıya ihtiyacınız var? Neden sadece tek bir duvar değil, diğer döşemeye yarı ofset?
Richard Marskell - Drackir

@ eBusiness, sadece kuzey ve batıdaki duvarlara izin verirseniz, sadece altındaki fayansların kuzey ve batısındaki duvarları koyarak güney ve doğudaki duvarları simüle edebilirsiniz.
Tetrad

C ile gitmeyi öneririm. Bu jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png adresinde yaptığım şey bu ve oldukça iyi çalışıyor. Tek sorun haritanın güney / doğu kenarı. Bununla ilgili bir şeyler yapman gerekecek.
Blecki

Yanıtlar:


14

B metodunu kullanırdım.

'Kapaklara' ihtiyaç duymamak için, her bir duvarı "1/2 duvar kalınlığı" her iki yönde uzatın. Bu, buluştukları yerde örtüşen duvarlar yaratacaktır, ancak şemalarınız bunun bir sorun olmadığını göstermektedir.

Bu nedenle, 'B', Pic # 3 Metodunda, yatay duvar biraz sola, dikey duvar biraz uzayacaktır.

[Ben burada yeniyim, sadece kayıtlı. Orijinal yayınınıza 'Yorum Ekle' düğmesini göremediğim için bir şey eksik mi? Bu, itibarı daha yüksek olan insanlar için bir ayrıcalık mı? Yoksa açıkça görmezden mi geliyorum? Bunu 'cevap' olarak eklediğim için üzgünüm.]


1
Bu bir cevap ve yorum yapmak için 100 (?) İtibar seviyesi olduğuna inanıyorum. Gamedev SE'ye hoş geldiniz! :)
Komünist Ördek,

2

Bir karakterin duvar içeren bir karo üzerinde durduğunu ancak her karoyu duvarın kendisi olarak görmeyi düşündüğünüze dikkat ettiniz mi? Yatay ya da Dikey biçimde bir duvar olarak yarım karo bile?

Artıları: Hesaplamalar ve yerleşimler önemsizdir, çarpışma önemsizdir, tüm hesaplamalar ve çarpışmalar sadece duvar yerleşimlerinin koordinatlarına dayanır.

Eksileri: Tüm uygulama, kod ve grafiklerinizi etkileyebilir. Metodunu da tamamen bırakmak istemiyorsun, hala bir döşemenin sadece bir bölümünün duvar olduğu özel durumlar istiyorsun.

Bu, uygulamamı temel alarak, ileriye dönük olarak, bir döşemeye her zaman başvurabileceğimi ve karakter yerime ve nasıl bir döşemeye bağlı olarak hesaplama yapacağımı bilerek yapardım.

Bir kale duvarı, merkezden sadece geçemediğim bir kutuyu çizerek bir hesaplama yapabilirdim ya da yuvarlak bir kaya varsa, merkezden aynı hesaplamayı yapabilirdim ama bir çember olarak, karakterim olduğu gibi hareket edebildi. yuvarlatılmış.


1

Bunu söylediğim için üzgünüm ama üçüncü yol gerçekten düşünmenin yolu, peki, zaten bunu yapabilme yeteneğine sahipsin, böylece devam et ve diğer ikisini düşün!

Mesele şu ki, bir duvar sıfır kutu, iki boyutsal (3 boyutlu dünyada yükseklik * uzunluk) kare iki bölmeyi bölmek. Bunları böyle göz önünde bulundurmalısınız, ancak zindanınızı ne zaman inşa edeceğiniz konusunda daha basit bir çözüm kullanabilirsiniz (özellikle başkaları parça yapabilirse).

Görünüşe göre duvarların "genişliğe" sahip olduğu Yukarıdan Aşağıya 2D bir oyun olduğu için o köşeye ihtiyaçları var (sizin 'başlık' nesneniz). Bu sadece 'grafik' olsa da, ben de bir çeşit şeyle giderdim:

Döşemeleri içeren bir 2B harita (örneğin, kiremit türü ve benzeri).

2 duvarlı 2B harita, ör. alt ve sağ (sol duvar, bundan soldaki döşemedeki 'sağ duvar' olacaktır).

+ Tüm duvarları ve 'kapakları' çizen bir Mantık vb.

Böylece mantık ve grafikleri ayıran. SetWall (ThisTile, LEFT, NOWALL) -> ThisTile 'den sola döşenen karonun sağ duvarını "NOWALL" a çevirerek bir "arayüz" yapabilirsiniz.

Belki bu bulanık gözükmektedir, fakat mesele şu ki bir tarafta her zaman bir mantık (artıklık olmadan gerçek veri) ve diğer tarafta ise bir 'bere ihtiyaç olup olmadığını hesaplayan' verinin çizimini 'yapmaya çalışmalısınız. ' vb.

++

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.