2012-07-04 78 views
6

मैं पुस्तकालय में किसी अन्य के साथ घटक की त्वचा को प्रतिस्थापित करने की क्षमता के साथ फ्लैश घटकों का एक सेट बना रहा हूं।फ्लैश कंपोनेंट (एसडब्ल्यूसी) लाइव लाइब्रेरी में पुस्तकालय तक पहुंचने में असमर्थ

वर्तमान में, मैं एप्लिकेशन चलाने के बाद लाइब्रेरी तक पहुंचने में सक्षम हूं, लेकिन लाइव पूर्वावलोकन के दौरान नहीं और मैं जानना चाहता हूं कि लाइव पूर्वावलोकन मोड में चलते समय पुस्तकालय तक पहुंचने के लिए घटक संभव है या नहीं जहां मंच के आसपास घटक खींचें और घटक पैरामीटर विंडो में उसके गुण बदल सकते हैं)

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

क्या आपका मतलब घटक के पथ में क्लाइंट लाइब्रेरी का स्थान शामिल है? मुझे यकीन नहीं है कि यह पूरी तरह से व्यवहार्य है - हमारे पास कुछ सौ ग्राहक पुस्तकालय हैं जो हमारे घटकों का उपयोग करते हैं। या क्या आपका मतलब क्लाइंट में क्लाइंट पथ सहित है। फ्लै ?? –

उत्तर

0

मुझे पूरी तरह से यकीन नहीं है कि आपने पहले से ही इस स्थिति को ठीक करने का प्रयास किया है। लेकिन उम्मीद है कि यह मदद कर सकता है।

अपनी लाइब्रेरी में मूवीक्लिप पर राइट क्लिक करें, लिंकेज का चयन करें और इसे कक्षा का नाम दें, यानी। मेरी चीज।

अपने कोड में,

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

आशा है कि मदद करता है या आप एक समाधान के करीब हो जाता है।

+0

"माईथिंग" प्रकाशित समय पर ज्ञात नहीं है, इसे घटक पर एक संपत्ति के रूप में सेट किया गया है। सबसे अच्छा, आप 'getDefinitionByName' का उपयोग करेंगे, हालांकि यह विफल रहता है। घटक का उपयोग करते हुए .fla प्रकाशित करते समय, यह ठीक काम करता है। समस्या उस घटक के लाइव पूर्वावलोकन में निहित है जो तत्काल से सक्षम नहीं हो पाती है।आईडीए में मंच पर लाइव पूर्वावलोकन में फ्लै की लाइब्रेरी। –

0

यह livepreview में मेरे लिए काम करता है, जब तक मैं configUI में लागू के रूप में, और आकर्षित नहीं:

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

नोट: जब मैं जहाँ मैं घटक संपादन कर रहा हूँ FLA पर काम कर रहा हूँ, बिटमैप केवल पुस्तकालय असंगत से प्रदर्शित होता है। कभी-कभी यह काम करता है, कभी-कभी ऐसा नहीं होता है। लेकिन जब मैं एसडब्ल्यूसी निर्यात करता हूं और फिर किसी अन्य फिल्म में घटक आयात करता हूं, तो यह हर बार लाइवप्रूव्यू के साथ-साथ रनटाइम पर भी काम करता है।

अद्यतन ऐसा लगता है इस CS6 में काम नहीं करता जब तक कि प्रतीक को पहले से ही घटक .SWC मैं अगर मैं इसे धोखा हो सकता है, SWC में एक चित्र को एम्बेड और उसके बाद इसकी जगह से देखना चाहता था में अंतर्निहित है गंतव्य फ़ाइल में एक ही नाम का एक और नाम। यह काम नहीं किया है, लेकिन यह तुम ऐसा कैसे कर सकते हैं करने के लिए मुझसे बात की थी:

enter image description here

तो, यह थोड़ा कठिन है, लेकिन आप यह चारों ओर से काम कर सकता था:

1) एक बनाना घटक एसडब्ल्यूसी में प्रत्येक संपत्ति के लिए डमी संपत्ति। 2) फ़ाइल में कस्टम क्लास का उपयोग करके इसे ओवरराइड करना जहां आप घटक

... जो सभी इसके लायक से अधिक परेशानी हो सकती हैं, लेकिन समस्या का समाधान प्रदान करना चाहिए।

+0

जैसे ही मैं इसका परीक्षण करने में सक्षम हूं, मैं अपने निष्कर्षों के साथ वापस रिपोर्ट करूंगा। इसे पोस्ट करने के लिए धन्यवाद। यह संभव है कि मेरा टेस्ट कोड (यह समान दिखता है, लेकिन आपके लिए थोड़ा अलग) फोंट की बात आती है तो बस विफल हो जाती है। –

+0

मुझे बताएं कि आपको क्या मिल रहा है - अधिक जानकारी इसे किसी दूसरे समाधान पर सीमित कर सकती है। LivePreview थोड़ी चंचल हो सकती है, लेकिन मेरे अनुभव में आमतौर पर केवल तभी जब आप घटक को संलेखित कर रहे हों, एक बार यह एक एससीसी पर प्रकाशित नहीं हो जाता है। – JcFx

+0

मैं यहां जो कुछ भी किया है उसे दोहराने की कोशिश कर रहा हूं। मेरे घटक स्टॉक UIComponent या UIObject से विरासत में नहीं हैं क्योंकि उन्हें कंसोल पर चलाने की आवश्यकता है और वे इसके लिए थोड़ा भारी हैं। बेशक, मेरी ज़रूरत फोंट के लिए है, और यह काम नहीं कर रहा है। मैं अलग-अलग/गायब होने का ट्रैक करने की कोशिश कर रहा हूं। UIComponent और UIObject के मेरे संस्करणों में configUI फ़ंक्शन नहीं है। क्या आपका मानक यूआईसीओम्पोनेंट पर आधारित है? एएस 2 या एएस 3? –