Dünyada, çoğunlukla ölçeklenebilirlik bölümlere ayrılan, çoğunlukla yalıtılmış bölgelerden oluşan bir açık dünya tek oyuncu RPG'si yapıyorum. Dünya birbiriyle etkileşime giren varlıklar içerir. Çoğu varlıklar, muhtemelen başka bölgelerdeki varlıklar dahil olmak üzere başka varlıklara da referans gösterecektir. being
için bir sınıf tanımı ElbetteOyun dünyasındaki yüklenmemiş nesneler için referansların saklanması ve alınması
class Being {
weak_ptr<Being> target;
// other members
};
gibi görünebilir, ben kaydetmek ve ve diskten oyun durumunu yüklemek gerekiyor. Şimdi, tüm varlıkların her zaman yüklü olmasını istemiyorum. Sadece şu anda yüklü olan bölgedeki tüm varlıklara ya da en kötüsü olan varlıklara yüklemek istiyorum. Bunu başarmak için iyi bir strateji nedir? Şimdiye kadar attığım birkaç fikir.
- Diskte, varlıklar, başvurulan her varlık için benzersiz bir tanımlayıcıyı saklar. A yüklenirken, B olarak başvuruda bulunulmuşsa, işaretçi basitçe ayarlanır. B boşaldıysa, ayrıca yüklenmelidir. Bunun dezavantajı, bu, doğrudan kullanılamayan çok fazla varlıkları tekrar tekrar yükleyebilmektir. Gerçek işaretçiler içeren varlıklar yerine, tanımlayıcılar içereceklerdir. Daha sonra referans verilen varlıklar kullanıldığında (örneğin, bir varlığın başka bir hedefe zarar vermesi gerekiyorsa), sadece gerektiği gibi yüklenir. Bu, referansları kullanarak karmaşıklaşır ve daha fazla kaydetme/yükleme işlemine neden olma potansiyeline sahiptir, ancak gereksiz verileri yüklemekten kaçınır.
Bu seçeneklere daha iyi alternatifler var mı? Bunun yaygın bir sorun olduğunu düşünüyorum, ancak SO ile ilgili soruları bulamadım.
Sizin yaklaşımınız aslında nesnelerin önbelleğe alınmasıdır. Burada bir göz atın: http://stackoverflow.com/questions/17807805/how-to-cache-1000s-of-large-c-objects Ana soru, yüklenecek nesneleri bulmak için nasıl verimli hale getirileceğidir. Çünkü onların kimliğine değil, konumlarına göre değişir. – Christophe