2010-01-29 29 views
5

Bir Flash projesi geliştirirken birçok kez sıkıntı çeken bir sorun yaşıyorum.Bileşenleri bir SWF kütüphanesine eklemenin doğru yolu nedir?

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at fl.containers::BaseScrollPane/fl.containers:BaseScrollPane::drawBackground() 
at fl.controls::TileList/fl.controls:TileList::draw() 
at fl.core::UIComponent/::callLaterDispatcher() 
TypeError: Error #2007: Parameter child must be non-null. 
at flash.display::DisplayObjectContainer/addChildAt() 
at fl.controls::BaseButton/fl.controls:BaseButton::drawBackground() 
at fl.controls::BaseButton/fl.controls:BaseButton::draw() 
at fl.core::UIComponent/drawNow() 
at fl.controls::ScrollBar/fl.controls:ScrollBar::draw() 
at fl.core::UIComponent/::callLaterDispatcher() 

Şimdi, benim durumumda, bu hata da açıkça CS4 FLA en bileşen ekledi eklenmemiş zaman kodunda parçalarının başlangıç ​​kaynaklanıyor: Bu şuna benzer. Geçmişte, ScrollPanes'ı kod içinde dinamik olarak oluşturmaya çalışırken bu soruna girdim. Main.fla'nın kütüphanesine ScrollPane bileşenleri ekleyerek çözdüm. Bu bir süre işe yaramış görünüyordu.

Şimdi, bir AstraFlash Otomatik Tamamlama kutusunu kullanmaya çalışıyorum. Uygun fla dosyalarını CS4'e aktardım ve Swf'ye bir Otomatik Tamamlama kutusu yerleştirdim. Her şey iyi oluşturulur, ancak yukarıdaki hata Swf yüklendiğinde ortaya çıkar. Benim düşüncem AutoComplete kutusunun işlevinin bir parçası olarak bir ScrollPane oluşturmaya çalışıyor olmasıdır. Tamam, bunu anlıyorum, bu yüzden ScrollPane bileşenini de aynı sonuçlarla birlikte kitaplığa ekliyorum.

Genellikle hatadan kurtulana kadar kitaplık bileşenleriyle/ayarlarıyla uğraşırdım, ancak bu işe karışmaktan bıktım ve sorunu çözmek için doğru yolu bilmek istiyorum.

  • Ne zaman bir Fla'nın kütüphaneye bir bileşen eklemek yerine sadece kod bileşeni oluşturmak için gereklidir: Yani, burada ben bir kaç soru vardır?

  • Bileşeni eklemek için hangi Flas'a ihtiyacınız var? Sadece onu kullanan? Ya da bu Fla'un tüm ebeveynleri de?

  • Otomatik Tamamlama bileşeninin bir ScrollPane bileşeni gerektirdiğini varsayalım. Bir bileşeni eklediğimde neden bu bağımlılık tanınmıyor? Neden açık bir şekilde eklemeliyim?

  • Kitaplık bileşenini kitaplığa ekleme ve kitaplığın 'Bileşen Varlıkları' klasörüne ekleme arasındaki fark nedir? Bu klasörün amacı nedir?

Çalışmak için bu Otomatik Tamamlama bileşenine gerçekten ihtiyacım var. AS3 kodunun doğruluğunu varsayarak hala yukarıdaki hatayı alıyorum, muhtemelen hangi ayarların yanlış olduğunu düşünüyorsunuz? Hayal kırıklığı nedeniyle, kütüphaneye, kütüphane bileşen bileşen klasörünün yanı sıra bir başlangıç ​​noktasına sahip olmak için her olası bileşeni eklemeyi denedim, ancak yine de hata alıyorum.

Herhangi bir yardım için teşekkür ederiz.

cevap

2

Kurulumunuzu anladığımdan emin değilim. Varsayalım, bazı bileşenler içeren bir çocuk flağınız var ve bir üst (yükleyici) flada bu bileşenlerin örneklerini oluşturmanız gerekir.

Sınıfları çocuk flağından ana flaya derlerseniz çalışır, ancak bu işleri çoğaltır.

Sorun, bir swf yüklediğinizde, sınıflar farklı bir ApplicationDomain oturmaktadır. Basitçe söylemek gerekirse, sınıfları bir swf ile yöneten şey, böylece bir yükleyici ile yüklü swf ve diğer bazı güvenlik öğeleri arasında sınıf çarpışmalarınız olmaz.

Düğme bileşeni (fl.controls.Button) içeren ve bunu bir yükleyici fladan yükleyen basit bir fla yaptım. Button bileşenini loader fla'ya eklemedim, ancak yüklenen swf'nin uygulama etki alanını kullanarak bir düğme örneği oluşturdum.

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
loader.load(new URLRequest('componentContainer.swf')); 

function loaded(event:Event):void { 
    addChild(loader.content); 
    var SWFButton:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('fl.controls.Button') as Class; 
    var button = new SWFButton(); 
    button.label = 'Test'; 
    addChild(button); 
} 

intergrated sorunların tür ve nasıl ApplicationDomain kullanılacağı hakkında Programlama Actionscript 3.0 bir sayfa yoktur, ama ben tam olarak dürüst olmak anlamadı: İşte nasıl.

HTH, George

İlgili konular