2016-04-12 28 views
2

Oyunum Ana Menü'den (25 nesne -> dinamik bir menü, her şey hareket ediyor), Oyun Üstü (3 nesne), Oyun Ekranı (15 - 20 nesne), Oyun Salonu (40) nesneler) ... Bu yüzden benim oyunum 50mb'lik bir ram kullandı ve daha sonra sürekli arttı, çünkü ben çok fazla nesne yaratıyorum!Libgdx Çöp Toplayıcıyı Zorluyor

Ama elbette sadece Ana Menü'ümde System.gc() komutunu kullandım ve şimdi her zaman yaklaşık 25 mb'de ve sorun yok gibi görünüyor! Ama insanlar bunun için kötü bir uygulama olduğunu söylüyorlar.

Ancak ekranlar yok oluyor ve RAM'imi boşa harcayacağım nesneleri tutmak istemiyorum, bu yüzden tek çözüm bu gibi görünüyor! Ben size tek kullanımlık uygulayan tüm nesneleri imha emin olun bellek yönetiminin libgdx yolu kullanmanızı öneririz

+0

doğru shaperenderers gibi şeylere '' 'dispose''' diyorsun? Aksi takdirde, onlara bağlı olan yerli nesneler asla temizlenmez. –

+0

Eh, oyun mağazasındaki her bir nesnenin örneğin bir sprite ve bir dikdörtgen sınıfı var ... Ve tek kullanımlık bir yöntemi yok ... Benim varlık yöneticimden yüklediğiniz dokular! –

+0

Oyun döngüsünüzde oluşturduğunuz her nesneyi yeniden kullanmanız ve az sonra yeni nesneler oluşturmanız gerekir. Yeni bir nesne oluşturduğunuzda, yeni bir nesnenin oluşturulduğu her zaman bellekte yeni bir konuma (ve belleği doldurmaya) bir işaretçi yaratıyorsunuz. Bu, yeni nesnelerinizin çoğunun muhtemelen bir alan güncelleştirmesi veya iki tane kullanabileceği anlamına gelir. – MeetTitan

cevap

2

, ayrıca ortak bir kalıptır nesne havuzu oluşturma kullanabilirsiniz, tek kullanımlık nesneler here bir listesini bulabilirsiniz libgdx wiki

Saygılarımızla: libgdx kullanılan bellek yönetimi için

Nesne havuzu inaktif veya "ölü" nesneleri yerine her seferinde yeni nesneler oluşturma yeniden ilkesidir. Bu, bir nesne havuzu oluşturmak için ile elde edilir ve yeni bir nesneye ihtiyacınız olduğunda, o havuzdan elde edersiniz. Havuzda kullanılabilir (ücretsiz) bir nesne varsa, döndürülür. Havuz boşsa veya boş nesneler içermiyorsa, nesnenin bir yeni örneği oluşturulur ve geri döndürülür. Artık bir nesneye ihtiyaç duyduğunuzda, onu "serbest" yaparsınız, yani havuza geri döner. Bu şekilde, nesne ayırma belleği yeniden kullanılır ve çöp toplayıcı mutludur.

Object pooling

+0

Nesnelerin yumurtlama ve kısa ömür süresinin olduğu Oyun Ekranı için nesne havuzu oluşturmuyor mu? Burada ekranları yok ediyorum ... Oyun Mağazası'ndaki nesneler oluşturulduktan sonra, ekranın yok edilmesine kadar asla yok olmazlar. Statik yapmadıkça, ama bununla birlikte gitmenin iyi olmadığını söylüyorlar! –

+0

Oyun mağazanız için açık bir şekilde sys.gc –

+1

çağırmak yerine nesne havuzlamasını kullanabilirsiniz. Bu nedenle, programı çalıştıran ve nesneyi zaten çalıştıran ve bunları ileten başlangıç ​​sınıfındaki nesneleri oluşturabilir miyim? Biraz dağınık görünüyor ... + bu nesnelerin her biri bir dokuya sahiptir ve biraz ram kullanmaktadır. –