2016-04-07 44 views
1

Birçok görünüm ve birçok denetleyiciyle oldukça karmaşık bir oyunum var ve gerçekten iyi çalışıyor ancak periyodik olarak devam ediyor. Kodumu düzeltmeye çalışıyorum, bu yüzden yapabileceğim kadar verimli, ama AS3'ün kiminle başa çıktığı ile ilgili bazı sorularım var.AS3 KaldırmakEventListener

AppController yükler 5 farklı OverlayControllers:

Şimdi burada çok temel bir örnektir. Bu OverlayControllers'ın her biri, AppController cihazımın dinlemesini bitirdiğinde bir Event.COMPLETE gönderir. Oyunda nerede olursam olalım, OverlayControll'larını dinleyen sabit bir EventListener'ım var.

Bindirme açıkken yalnızca oradaki dinleyicileri almalı mıyım? Ve kapattıklarında onları çıkarın?

Olay dinleyicisi süresini atlayıp AppController'ı OverlayControllers uygulamasına iletmem gerekirse, yalnızca bir EventListener gerektirmek yerine bir genel işlevi çağırabilir mi?

Açıkçası, bunlar sahneden çıkardığım nesneler değil. Sadece gizleniyorlar. Bir nesneyi kaldırırsam, olay dinleyicilerini her zaman yok etmeden önce kaldırırım.

+1

Herhangi bir olay sürekli olarak gönderilirse, olayların dinlenmesi her halükarda gecikme üretmez, diğer taraftan gönderici olaylar olabilir. Gecikme sorunları yaşanırken, olaylar nadiren söz konusu ise, büyük olasılıkla durum, GC'nin başarılı geçmesiyle sonuçlanan yüksek nesne yaratımıdır. – BotMaster

cevap

1

Her şeyden önce Adobe Scout'u (http://www.adobe.com/devnet/scout/articles/adobe-scout-getting-started.html) indirin ve "gecikme" ye neden olan şeyleri görün - muhtemelen çöp toplama ... sorununu düzeltin. Mümkün olduğunca çok sayıda dinleyiciyi kaldırmak her zaman iyi bir şeydir, ancak bunların soruna neden olduğundan emin olun. Profil bellek kullanımı ve çöp toplama (ana oyun döngüsü sırasında) önlemek için nesne oluşturma/imha tutmak için en az tutmak için deneyin.

+0

Ve yük çok sayıda nesne oluşturma/imhadan kaynaklanıyorsa ve aynı nesnelerin çoğuna sahipseniz - nesne havuzu uygulamanız gerekebilir – Philarmon