Sürüm oluşturma sorununu çözmenin birçok yolu vardır; sürüm başına bir yükleme işlevine sahip olarak yapabilirsiniz, varlık yapısının zaman içindeki dönüşümünü (genellikle özniteliklerle) tanımlayarak işlemi otomatikleştirmeyi deneyebilir, yükleme / kaydetme işlevlerinde sürüme özgü kontroller yapabilirsiniz. .
"Değişiklikleri tanımla" yaklaşımını seviyorum ama nitelikler aracılığıyla yapmaya çalışmanın garip hızlı olduğunu buluyorum . Bunun yerine işlevleri kullanırdım; tüm uygun sürümünüz için N
sürümdeki verileri sürümdeki verilere dönüştüren bir işlev uygulamak N + 1
. Yüklendiğinde, sürümü en son sürümle karşılaştırarak kontrol edin ve değilse, verileri tüm uygun sürüm oluşturma işlevleriyle çalıştırın. Her zaman en son sürümü kaydedin.
Veriler hala çalışma zamanı anahtar / değer formundayken dönüşümü yaparsanız bu en iyi sonucu verir. Bu, muhtemelen kendi ikili biçiminiz varsa JSON veya XML'nin temel anahtar / değer biçimini kullanamayacağınız için, verileriniz için "özelliklerin çalışma zamanı torbası" yaklaşımı olan bir gösterim uygulamak isteyeceğiniz anlamına gelir. Bunu yapmazsanız, size de çirkin aldığı, etrafında eski sınıf tanımlarını tutmak gerekebilir. Bu özellik kötü biçimde varlıklarını sahip olabilme da müthiş oyun editörü gelişimi için faydalıdır.
Geliştirme sırasında verilerinizi yinelediğinizde, doğal olarak en son sürüme kadar kabarır ve sonunda eski sürüm oluşturma işlevlerini silebilirsiniz. Bu, Lonca Savaşları 2'deki sanat varlıklarını (haritalar gibi) versiyonlamak için kullandığımız aşağı yukarı aynı yaklaşımdır.
Şimdi, tüm bunlar, varlıklar için hem metin hem de ikili serileştirmeyi desteklemenin yararlı olduğunu düşünüyorum. Geliştirme sırasında, tüm verilerinizi XML veya JSON tabanlı insan tarafından okunabilir bir biçimde tutun. Bu, yineleme yeteneğinizi çok artırabilir, çünkü verileri düzenlemek için bu kadar karmaşık araçlar oluşturmanıza gerek yoktur. Elle basit hızlı ayarlamalar yapabilmeye dönebilirsiniz.
İkincisi, oyunu göndermek için hala ikili bir format bile istediğinizi varsayarsak (dosya boyutunu veya dosya G / Ç sürelerini iyileştirebilir, bu yüzden geçerli bir istektir), serileştirme ve serileştirme API'lerinizi sürümlemeyi işlemek için tasarlayın. Sürüm olduğu bir noktada gibi gemi güncellemeleri veya hata düzeltmeleri isteyebilirsiniz çünkü hala bir kargo bağlamında yararlı. NET serileştirme ve Boost serileştirme sürüm yeteneklerini açıklayan bazı belgeler bulabilirsiniz ilginç. Eğer varsa edilmektedir metin ve ikili biçimlerin ikisini birden desteklemek için gidiyor, siz (veya yapı otomatik testler daha iyi, bunu yapmak için) zaman zaman bunları test emin olun.