2012-07-04 93 views
6

Bileşenin derinliğini kitaplıktaki bir diğeriyle değiştirme yeteneğine sahip bir dizi Flash bileşeni yapıyorum.Flash Bileşen (SWC), canlı önizlemede kitaplığa erişemiyor

Şu anda, uygulamayı çalıştırdıktan sonra ancak canlı önizleme sırasında değil, kitaplığın canlı önizleme modunda çalışırken bileşenin kütüphaneye erişip erişemeyeceğini bilmek istiyorum. Eğer)

Here is a simplified code that just looks to see if there is a symbol of the name specified and than instantiates it and adds it as a child.

package 
{ 
    import fl.core.UIComponent; 
    import flash.display.MovieClip; 
    import flash.system.ApplicationDomain; 

    /** 
    * ... 
    * @author Roy Lazarovich 
    */ 
    public class CompTest extends UIComponent 
    { 
     private var customfile :String; 

     public function CompTest() 
     { 

     } 

     override protected function configUI():void 
     { 

     } 

     override protected function draw():void 
     { 
      super.draw(); 
     } 

     private function setCustomFile():void 
     { 
      if (ApplicationDomain.currentDomain.hasDefinition(customfile)) 
      { 
       var c:Class = Class(ApplicationDomain.currentDomain.getDefinition(customfile)); 
       var mc:MovieClip = new c(); 
       addChild(mc); 
      } 
     } 

     [Inspectable(name = "_Custom File", defaultValue = "")] 
     public function set _customfile(value:String):void 
     { 
      customfile = value; 
      setCustomFile(); 

      drawNow(); 
     } 

    } 

} 

Teşekkür sahne etrafında sürükleyin ve Bileşen Parametreleri penceresinde özelliklerini değiştirebileceğiniz!

+0

Bunu çözmede herhangi bir şans var mı? –

+0

Kütüphaneleri yolunuza dahil ettiniz mi? – michael

+0

İstemci kitaplığının yerini, bileşen yollarına dahil etmeyi mi kastediyorsunuz? Tamamen uygulanabilir olduğundan emin değilim - bileşenlerimizi kullanan birkaç yüz istemci kütüphanemiz var. Veya istemcideki istemci yolunu dahil etmeyi mi kastediyorsun? –

cevap

0

Bu durumu düzeltmeye çalıştıklarınızdan tam olarak emin değilim. Ama umarım bu yardımcı olabilir.

Kitaplığınızdaki MovieClip'e sağ tıklayın, Bağlantı'yı seçin ve bir sınıf adı verin, örn. Benim şeyim. Kodunuzda

, yardımcı veya daha yakın çözüme daha alır

newMyThing = new MyThing(); 
this.addChild(newMyThing); 
trace("tada!"); 

Umut.

+0

"MyThing", yayınlanma zamanında bilinmez, bileşen üzerinde bir özellik olarak ayarlanır. En iyi ihtimalle 'getDefinitionByName' kullanırsınız, ancak başarısız olur. Bileşeni kullanarak .fla dosyasını yayınlarken, iyi çalışıyor. Sorun, bileşenin Canlı Önizlemesinde bulunamamasıdır.IDE'de sahnenin canlı önizlemesine fla'nın kütüphanesi. –

0
Bu sürece ben configUI bunu uygulamak gibi LivePreview benim için çalışır ve çekemez

:

public class EditableBitmap extends UIComponent 
{ 
    protected var placeholder:String = "None"; 
    protected var bitmap:Bitmap; 
    protected var scale:Number = 1; 

    [Inspectable(name = "Placeholder", type = String, defaultValue="None")] 
    public function set Placeholder($value:String):void 
    { 
     placeholder = $value; 
     configUI(); 
    } 
    public function get Placeholder():String { return placeholder; } 

    public function EditableBitmap() 
    { 
     //Console.Debug("NEW EditableBitmap"); 
     super(); 
    } 

    override protected function configUI():void 
    { 
     //Console.Debug("EditableBitmap configUI: " + width); 
     if (!isNaN(width)) 
     { 
      wDim = width; 
      hDim = height; 
      graphics.clear(); 
      graphics.beginFill(0x000000, 0.1); 
      graphics.drawRect(0, 0, wDim, hDim); 
     } 
     if (placeholder != "None" && placeholder != "") 
     { 
      var asset:Class = getDefinitionByName(placeholder) as Class; 
      var data:BitmapData = new asset() as BitmapData; 
      bitmap = new Bitmap(data); 
     } 
     super.configUI(); 
    } 

    override protected function draw():void 
    { 
     if (bitmap) 
     { 
      addChild(bitmap); 
      bitmap.x = off_x * scale; 
      bitmap.y = off_y * scale; 
      bitmap.scaleX = bitmap.scaleY = scale; 
     } 
    } 
} 

NOT: Ben bileşeni düzenlediğimden nerede FLA üzerinde çalışıyorum olduğunda, bitmap yalnızca tutarsızlık kitaplığından görüntülenir. Bazen çalışır, bazen olmaz. Ancak, SWC'yi verdiğimde ve bileşeni başka bir filme içe aktardığımda, her zaman, LivePreview'de ve çalışma zamanında çalışır.

sembol zaten ben TSK içinde bir resim gömme ve daha sonra bunu değiştirerek, onu kandırmak istedi .swc bileşende gömülür sürece bu CS6 çalışmaz görünüyor GÜNCELLEME Hedef dosyada aynı addan başka bir tane. Bu işe yaramadı, ama bunu nasıl bana işaret etti:

enter image description here

Yani, biraz zahmetli, ama bu geçici bir çözüm olabilir:

1) Oluşturma bileşen SWC'deki her özellik için kukla varlık. 2) Bunun için özel bir sınıf kullanarak,

bileşenlerini dağıttığınız dosyada geçersiz kılınız. Bunların hepsi değerden daha fazla sorun olabilir, ancak bu sorun için bir çözüm sunmalıdır.

+0

Bunu test edersem, bulgularımı geri bildireceğim. Gönderin için teşekkür ederim. Test kodumun (benzer görünüyor, ama sizinkilerden biraz farklı) yazı tiplerine geldiğinde başarısız olması olasıdır. –

+0

Bana ne bulduğunuzu bildirin - daha fazla ayrıntı onu başka bir çözüme daraltabilir. LivePreview biraz lapa lapa olabilir, fakat benim tecrübemde genellikle sadece bileşeni oluştururken değil, bir kere swc'ye yayınlanır. – JcFx

+0

Burada yaptığınız şeyi çoğaltmaya çalışıyorum. Bileşenlerim, bir konsol üzerinde çalışması gerektiğinden ve bunlar için biraz ağır olduğundan stok UIComponent veya UIObject'ten miras almıyor. Tabii ki, ihtiyacım yazı tipleri için, ve bu işe yaramıyor. Farklı olanı/eksik olanı bulmaya çalışıyorum. UIComponent ve UIObject sürümlerimin bir configUI işlevi yoktur. Sizinki standart UIComponent'i temel alıyor mu? AS2 veya AS3? –