2012-07-04 8 views
6

コンポーネントのスキンをライブラリ内の別のスキンで置き換える機能を備えたFlashコンポーネントのセットを構築しています。ライブプレビューでライブラリにFlashコンポーネント(SWC)をアクセスできません

現在、アプリケーションを実行した後でライブプレビューにアクセスすることはできますが、ライブプレビューではアクセスできません。ライブプレビューモードで実行中にコンポーネントがライブラリにアクセスできるかどうかを知りたい場合はあなたは、ステージの周りにコンポーネントをドラッグして、コンポーネントパラメータウィンドウでそのプロパティを変更)

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(); 
     } 

    } 

} 

おかげできる場所!

+0

この問題を解決する運がありますか? –

+0

パスにライブラリを含めましたか? – michael

+0

コンポーネントのパスにクライアントライブラリの場所を含めることを意味しますか?私はそれが完全に実現可能であるかどうかはわかりません - 私たちのコンポーネントを使用する数百のクライアントライブラリがあります。 クライアントのパスをクライアントの.flaに含めることを意味しますか? –

答えて

0

私はこの状況を修正しようとしています。しかし、うまくいけば、これは助けるかもしれない

ライブラリ内のMovieClipを右クリックして、「リンケージ」を選択し、クラス名を付けます。私のモノ。あなたのコードで

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

希望に役立ちますかあなたは近いソリューションになります。

+0

"MyThing"は公開時には分かりませんが、コンポーネントのプロパティとして設定されています。最高でも、あなたは 'getDefinitionByName'を使いますが、失敗します。 コンポーネントを使用して.flaを公開すると正常に動作します。問題は、コンポーネントのライブ・プレビューにあるインスタンスからインスタンス化できないことにあります。flaのライブラリーをIDEのステージ上のライブプレビューに追加します。 –

0

これは、限り、私はconfigUIでそれを適用するよう、LivePreviewに私の作品、そしてドローない:私はコンポーネントを編集していますFLAに取り組んでいるときは、:

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; 
     } 
    } 
} 

NOTEビットマップはライブラリから矛盾したものだけが表示されます。ときどき動作しますが、時には動作しないことがあります。しかし、SWCを書き出した後、そのコンポーネントを別のムービーにインポートすると、毎回、LivePreviewだけでなく実行時にも機能します。

UPDATE シンボルがすでにSWCに一つの画像を埋め込むし、その後でそれを置き換えることで、私はそれをだますことができるかどうかを確認したかったコンポーネント.SWCに埋め込まれていない限り、これはCS6では動作しないようです宛先ファイル内の同じ名前の別名。これは動作しませんでしたが、それはあなたがこれを行うことができますどのように私を指すでした:

enter image description here

ので、それは少し面倒ですが、あなたはでこの問題を回避できます。

1)の作成しますコンポーネントSWCの各プロパティのダミーアセット。 2)コンポーネントをデプロイするファイルでカスタムクラスを使用してこれをオーバーライドします。

...これらのすべてが問題以上に難しいかもしれませんが、問題の解決方法を提供する必要があります。

+0

私はこれをテストすることができるようになり次第、私は私の発見と一緒に報告します。投稿していただきありがとうございます。私のテストコード(それは似ていますが、あなたのものとは少し異なります)は、フォントに関しては単に失敗する可能性があります。 –

+0

あなたが見つけたものを教えてください - 詳細は別の解決策に絞ってください。 LivePreviewはちょっと薄れているかもしれませんが、私の経験では通常、コンポーネントをオーサリングしているときだけで、swcに公開されていません。 – JcFx

+0

ここでやったことを複製しようとしています。私のコンポーネントは、コンソール上で実行する必要があるので、株式UIComponentまたはUIObjectから継承されません。もちろん、私の必要性はフォントのためであり、それは動作しません。私は何が違う/見つからないかを追跡しようとしています。私のUIComponentとUIObjectにはconfigUI関数がありません。あなたは標準のUIComponentに基づいていますか? AS2またはAS3? –

関連する問題