İçeriden Noel Llopis'in Oyunları bu günlerde "Uzaktan Oyun Düzenleme" yayınına dokundu . Açılış paragrafı:
Uzun zamandır minimal oyun çalışmalarının hayranıyım. Çevrimdışı veya ayrı bir araçta yapılabilecek her şey çalışma süresinin dışında olmalıdır. Bu, oyun mimarisini ve kodunu çok yalın ve basit bırakır .
(Bu makale,% 100 katılıp katılmamanıza bakılmaksızın, Noel öğelerinin çoğunda olduğu gibi şiddetle tavsiye edilir.)
Buradaki anahtarın karmaşıklığı motorun dışında tutmak olduğuna inanıyorum. Yine de esnekliğiniz olabilir, ancak içerik kanalında esneklik vardır. Verileri dönüştürmek ve taşımak için zaman harcamayarak daha iyi performans elde edersiniz.
Daha iyi performans, bazı motor içi düzenleme yeteneklerini kaybetmesine rağmen, garip bir şekilde daha düşük yineleme süresine dönüşebilir: oyunu bir saniyede yükleyebilirseniz bir şey denemek daha kolaydır.
" Unix felsefesinin bazı ilkelerini benimsemek " nin zincirinizi esnek tutmanıza yardımcı olacaktır: küçük bir modüler boru hattı.
Kişisel felsefem: Verileri olabildiğince çevrimdışı olarak pişirin , ancak istediğiniz zaman yeni pişmiş verileri almak için motor desteği sağlayın. (Bu yeni verinin uygun bir noktaya kadar devreye girmesi gerekmediğini unutmayın: "yenile" düğmesine basıldığında, bir sonraki seviye başlar, her ne olursa olsun yeni bir alana geçiş yaparsınız. Anahtar, en aza indiren tatlı noktayı bulmaktır. minimum kod karmaşıklığı ve kodlama çabası ile yineleme süresi.)
Şirketimizde sanatçı / tasarımcıya dönük araçlarımızın çoğu UI sorunlarına odaklanmıştır: tek varlıkların veya bunların toplu işlerinin manipülasyon kolaylığı vb. Bazen Photoshop veya 3DS Max gibi 3. taraf araçlardır. Bu araçlar bir ara formata aktarılır (genellikle kaynak ikili verilere gönderme yapan xml'dir, ancak her zaman değil). Ara format, hedef platform için hızlı ve yararlı bir şey haline getiren bir arka uç "veri oluşturma" aracı tarafından alınır.
Taşınabilirlik, ek arka uç veri oluşturma araçları ekleyerek veya içerik oluşturuculara görünmez olma avantajına sahip mevcut arka uç veri oluşturma araçlarını genişleterek elde edilir.
Şimdi, uygun bir artımlı veri markasıyla, pişmiş formatta saniyeler içinde değişiklik yapabilirsiniz; motorunuz örümcek veya bir araç örümcek olabilir ve daha sonra bunlar kaynak sisteminizde, uygun olduğunda yeniden yüklenmeye hazır olarak görünür.
Araçlar - özellikle arka uç verileri araçlar - genellikle motor kodundan daha sloppier ve ümitsizdir. Bu sorun değil, çünkü bunları yeniden düzenlemek / yeniden yazmak, genişletmek ve test etmek daha kolaydır; davranışları için spesifikasyonlarınız var ve bunları bazı motor kodlarına kıyasla test etmek oldukça kolaydır.
Sorularınızla ilgili görüşlerim:
Motor çeşitli görüntü formatlarını yükleyebilmeli mi? Sadece TGA yükleyicinin kodunu kullanmak oldukça kolaydır.
(Yanda: motorda bir TGA dekoder kullansanız bile, el kodlaması yapmayın. Sadece sorun istiyorsunuz - çoğu görüntü formatına sahip birçok incelik ve uymayan birçok araç var görüntü işleme için mevcut iyi test edilmiş kütüphane kodunu bulmaktan en iyisidir.)
Burada araç TGA'dan iç doku formatınız ne olursa olsun, meta verilere dönüştürürüm.
Ses formatları ne olacak? Sadece wav dosyalarının yüklenmesini desteklemek mümkün müdür? Genellikle büyük olan ortam müzik dosyaları hakkında.
Burada üç biçim kullanıyoruz: izlenen müzik (.xm), ADPCM (.wav) ve Speex (.spx). Bunun nedeni çoğunlukla el bilgisayarlarında olduğumuz ve bu formatların kodunu çözmek için çok hafif olmasıdır.
Motor dinamik TTF ayrıştırma ve atlas oluşturma kapasitesine sahip olmalı mı? Doku paketleme.
Atlasing zor bir sorundur: son sorunuza bakın yanıtlarına bakın. Neredeyse her zaman çevrimdışı yapmaya değer.
Ayrıca, karakter başına meta verileri sıfıra yakın yük kodlu fırınlanmış bir yapı haline getirebilirsiniz.
Kapanışta, mod topluluğu için bu boru hattını oyununuzla temizleyebilir ve paketleyebilirsiniz. Her zaman daha fazla kaynak biçimi ekleyebilirsiniz. Ayrıca, belirli durumlarda içerik oluşturma araçları ile motor arasındaki boşluğu doldurmanızı engelleyen hiçbir şey yoktur; umarım veri pişirme kodunuz ve örümcek / aktarım kodunuz, bazı durumlarda doğrudan içerik oluşturucu araçları tarafından kullanılabilecek kitaplıklara dönüştürülebilir. Ama benim ilk hedefimi yapmam gerekmiyor, mutlaka ... Bunun nihai bir hedef olacağını ve bunun tasarımınızı biraz etkilemesine izin verin ve önce düşük asılı meyveyi tercih edin.
Güncelleme olarak, dokular için KTX Dosya Biçimini kullanmayı düşünebilirsiniz . struct
Çoğu GL kullanımı için çoğunlukla "oku ve git" olma avantajına sahiptir (ve yorumlarınızdan hala esnek ve iyi tanımlanmışken GL'yi hedefliyormuşsunuz gibi görünür).
KTX üstbilgisi, hedefinize bağlı olarak tamamen pişmiş veriler için biraz yüksek olabilir ve kullanıcı tabanınıza bağlı olarak endian takas desteğinden vazgeçmek isteyebilirsiniz ... ama kesinlikle en azından tasarım konuları için bir değere değecektir.