Koşullarınız:
Her ikisine de sahip olamazsınız. Neden? Çünkü varlığın kendisinden daha yüksek bir düzeydeki kod (aşağıdaki örneklere bakın), o varlığın ne zaman kullanılması gerektiğine karar verir. Sonuç olarak, yalnızca aynı düzeydeki kod, kuruluşunuzun kaldırılmaya uygun olup olmadığını belirleyebilir.
Ancak , olabilecek en yüksek kodun dinlediği bir olayı tetikleyerek işletmenin kendi kaldırılmasını talep edebilmesidir . Bu daha yüksek seviye bu kaldırma talebini bir listede saklar.
Örnek 1: Olaysız
Dünyanızdaki varlıklar arasındaki çarpışmaları kontrol ediyorsunuz. Bu, genellikle her oyunu birbirine karşı kontrol eden ana oyun döngünüzde daha yüksek bir şekilde ele alınır. Bu örnekte spesifik olarak, bir işletme bir başkasıyla çarpıştığında, yalnızca o işletmenin dahili mantığı, ne kadar hasar aldığını ve "süresi dolmuş" olup olmadığını belirleyebilir. Öyleyse dünyanızda A, B, C ve D olmak üzere dört varlığınız olan çarpışmaların mantık akışını takip edelim.
A'yı B ile çarpışma açısından kontrol ediyoruz. Bir çarpışma var. A% 50 hasar alır.
A'yı C ile çarpışma açısından kontrol ediyoruz. Bir çarpışma var. A% 50 hasar alır. Hasar 0'a ulaştığından A, "öldüğünü" belirler. Kendisini listeden çıkarır.
D ile çarpışma için A'yı kontrol ederiz. Çarpışma olmazdı, ama asla o kadar ileri gidemezsiniz: Varlıklar listeniz bir traveral işlemin ortasında değiştirildiği için bir çalışma zamanı istisnası elde edersiniz.
Örnek 2: Olaylarla
Öncekiyle aynı kurulum.
A'yı B ile çarpışma açısından kontrol ediyoruz. Bir çarpışma var. A% 50 hasar alır.
A'yı C ile çarpışma açısından kontrol ediyoruz. Bir çarpışma var. A% 50 hasar alır. Hasar 0'a ulaştığından A, "öldüğünü" belirler. Varlık yönetim koduna "Beni en kısa sürede kaldır" diyen bir olay başlatıyor. Varlık yönetim kodu, etkinliğin bir parçası olarak gönderilen varlık referansına bakar ve bu referansı kaldırılacak varlıklar listesinde saklar.
A'yı D ile çarpışma açısından kontrol ediyoruz. Çarpışma yok ve kontrol gayet iyi çalışıyor.
Şimdi, mevcut oyun döngüsü yinelemesinin en sonunda, kaldırılacak varlıklar listesini çalıştırın ve bunların her birini ana varlıklar listenizden kaldırın.
Bunun sorunu tamamen nasıl önlediğini görebilirsiniz. Olayları kullanmanıza gerek yoktur, sinyaller veya başka bir şey kullanabilirsiniz, ancak prensip aynıdır - güvenli bir şekilde yapana kadar varlıkları kaldırmayın. İşleri temiz ve düzenli tutmak için bu yaklaşımın tersi, eklemek için varlıklarla aynı şeyi yapıyor - bunlara referansları tuttuğunuzdan emin olun ve bunları yalnızca bir sonraki oyun döngüsü yinelemesinin başında ekleyin.
Son olarak, ana varlık listenizde ekleme / kaldırma işlemi yapmak için her kullandığınızda hem kaldırmayı hem de eklenecek listelerinizi temizlemeyi unutmayın.
PS. Bireysel kaldırma işlemleri yapmak için ana listenizi aramaktan korkmayın. Bu, varlık yönetiminin bir parçası ve parselidir ve büyük listeler bile geçiş yapmak için çok hızlı olma eğilimindedir - sonuçta, bunun için tasarlanmıştır.