2012-03-10 23 views
5

Groovy'de bir oyun geliştiriyorum ve mimariyi daha temiz bir hale getirmek için kapakların kapsamlı bir şekilde kullanımını düşünüyorum. Örneğin, Player nesnesinin, uygulanan durum etkilerine (zehirlenme gibi), her bir oyun dönüşünü yürütmek için bir kapatma listesi listesi olacaktır. Oyun kaydedilirken bunlar serileştirilmelidir.Groovy'de kapakların serileştirilmesi

Kapatmaların seri hale getirilmesi gereken nesnelerde saklanması genellikle iyi bir fikir midir? Ya da daha geleneksel bir mimariyi seçmeliyim (ör. StatusEffect nesnelerinin bir listesini saklamak)?

serialising Kapaklar tamamen mümkündür :-) her oyun dönüşü yürütmek için kapanışları bir liste olması

cevap

4

gerçekten güzel bir fikir gibi geliyor. iki yöntem dehydrate ve rehydrate Kapalı Yolu eklenmiştir olarak Groovy 1.8.5 beri kolaylaştırdı edilmiştir (böylece owner, thisObject ve delegate serileştirme önce soyulabilir)

Ama için doğal java Serileştirme ile ilgili sorunlar verilerin kaydedilmesi. Sistemler arasında kısa ömürlü veri göndermek için harika olabilir (ancak o zaman bile protocol buffers veya thrift'a bakabilirim)

Oyununuzu güncellemeniz gerekirse ne olacağını düşünün? poisoned'da bir hata varsa, kaydetme dosyasında buggy zehirli kapama ile kaydedilen her kullanıcı, o hatayı kapalı kalana kadar tutacaktır. Çok oyunculu bir oyunda, insanların oyun kaydetme dosyalarını, beklenmedik veya istenmeyen güçlere (güçlerin kendileri için işlevsellikler dosyada saklanacağı gibi) vermeleri için manipüle etmeleri de mümkün olacaktır. Zehirli bir etkiyi manipüle etmeyi görebiliyordum, bu yüzden onları çıkarmak yerine HP ekliyor yararlı olabilir ;-)

Kısacası, diyorum ki, bir karakter sayfası yazacağım. Kullanıcı, envanter, puan, vb, etkiliyor ve sonra dosya okunurken kapatmalarını kontrol edin ve uygulayın.

+0

Teşekkürler. Groovy'un dahili olarak kapatmalarını nasıl kullandığını görmek için Java decompiler ile uğraştım ve şimdi bunları serileştirmekle ilgili yanlış bir şey olmadığını görüyorum. Onlar doCall yöntemi ile otomatik olarak oluşturulan sınıflar ve kapamada kullanılan tüm dış değişkenlere kayıtlı referanslardır. Tek sorun, her ne kadar kullanılmasalar da her zaman 'bu' için bir referans göstermeleridir, ancak 1.8.5'ten beri mevcut olan bir çalışma var dediğiniz gibi – ramirami

İlgili konular