hakkında
Bunlar aslında bir soruda iki soru. Her şeyden önce büyük miktarda fayans verilerini verimli bir şekilde saklamanın bir yolunu arıyorum. Diğer özellik, veri kümesini sorgulama ve kutucukları görüntüleme ile ilgilidir. Önce size biraz bilgi vereyim.
Tuval'e dönüştürmek için CraftyJS kütüphanesini kullanarak tarayıcı tabanlı çok oyunculu bir tycoon oyunu yapıyoruz. GUI'nin arka planında PHP üzerinde Yii Framework kullanıyoruz ve hepsi bir Python rastgele harita üreteci ve oyun motoruna bağlanıyor.
İlk kaba harita görüntüsü şöyle görünür: http://i.imgur.com/khAXtl.png
Harita verilerinin saklanması
Oyun dünyası, oyun her başladığında rastgele oluşturulur. Boyut her oyuncu için 100x100 altıgen fayans. Bu, üç oyunculu bir oyun için 90.000 karo oluşturulduğu anlamına gelir. Şu anda haritayı oluşturduğum bir JavaScript dizisi oluşturuyorum.
Bu, renderleme için iyi çalışır, ancak harita ile her türlü etkileşim için, hangi oyuncunun karoya sahip olduğunu, üzerine ne tür bir yapı inşa edildiğini, mevcut fiyat ve benzeri şeyleri depolamamız gerekir. İlk başta, en azından prototip için, MySQL kullanmak istedik, ancak bazı testlerden sonra, istediğim kadar hızlı değil. Belki MongoDB gibi bir nesne deposu, bir SQL tablosu yerine döşeme verilerinin depolanması için daha uygundur. Ya da belki başka bir şey?
Haritayı görüntüleme
Gördüğüm başka bir sorun da harita üzerinde dolaşmak. Şu anda görünümde olmasa bile her bir karo için kurnaz varlıklar oluşturuyorum. Bu yavaştır, çünkü Crafty yalnızca görünüm alanında olanları oluştursa da, her render etkinliğindeki tüm karoları depolar ve yineler. Şu anda sahip olduğum şey, yüklendiğinde çok yavaş olan ve hareket ettiğinizde kekeler olan çizilmiş bir harita, şimdi oynanabilir hale getirmek istiyorum.
İlk fikrim, görüntü alanında bulunan döşemelerin görüntülenen alt kümesini yüklemekti. Ancak bir oyuncu görünüm alanını boş bir alana taşıdığında, sunucuyu sorgulamam ve yanıtı geri beklemem gerekir, ancak o zaman harita oluşturulabilir. Bu, yerel bir uygulamada iyi olurdu, ancak bir web oyununda laggy.
Haritadan sorunsuz performans elde etmenin yolu, daha büyük bir kutucuk alt kümesini javascript dizisine önceden yüklemek ve önbellek olarak kullanmak olabilir. Oyuncu birkaç ekran "önbellek" olurdu ve o görünüm penceresini hareket ettirdiğimde, JS "önbellek" için daha fazla kiremit yüklemek istiyorum.
Doğru yöne mi gidiyorum? Benzer bir şey yapan birinden daha fazla bilgi almak isterim. Oyun geliştirmede yeniyim, ancak son birkaç haftadır birçok kaynaktan geçiyorum.