2010-12-10 7 views
0

Ich habe einen Inhaltswechsler in meinem Flash CS5/AS3-Projekt, den ich an verschiedenen Orten verwenden möchte, während ich an verschiedenen Stellen unterschiedliche Inhalte (html) lade.Flash-AS3-Codierungsvariablen, die für jeden Aufruf unterschiedlich initialisiert werden

Unten ist der AS3-Code für die gescrollte Textkomponente. In der 'compnentsettings.xml' definiere ich, welche .html Datei aufgerufen werden soll.

Im Moment habe ich nur den Scroller an einer Stelle arbeiten. Ich kann es klonen, aber natürlich werden die gleichen Daten geladen.

Ich glaube, ich habe die settingsComponent Funktion von scrolledTextComponent.as (unten) modifizieren verschiedene compnentSettings.xml Dateien

ich die Variable __xmlSettingsPath müssen initialisiert für jeden Anruf unterschiedlich zu laden, und ich habe keine Ahnung, wie zu tun Dies. Bitte helfen Sie!

package com 
{ 
    import flash.display.*; 
    import flash.events.TimerEvent; 
    import flash.net.URLRequest; 
    import flash.net.URLLoader; 
    import flash.text.StyleSheet; 
    import flash.utils.Timer; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.events.*; 

    import com.LoadXmlPlayerClass; 

    public class scrolledTextComponent extends MovieClip 
    { 

     // component variables 
     private var __xmlSettingsPath:String = "componetsettings.xml"; 
     private var _sheet:StyleSheet = new StyleSheet();  
     public var _loadSettingsXml:LoadXmlPlayerClass = new LoadXmlPlayerClass(); 
     private var _settingsXmlTimmer:Timer = new Timer(250);  

     public var _loadXml:LoadXmlPlayerClass = new LoadXmlPlayerClass(); 
     private var _newsTimmer:Timer = new Timer(250);  


     //private var _loaderIcon_mc:LoaderMC = new LoaderMC(); //used to show xml loading state 
     private var _urlCSS:URLRequest = new URLRequest(); 
     private var _loaderCSS = new URLLoader(); 

     private var _urlHTML:URLRequest = new URLRequest(); 
     private var _loaderHTML = new URLLoader(); 


     //text 
     private var _txt:TextField = new TextField(); 
     private var _MyScrollBar:MyScrollBar = new MyScrollBar(); 

     public function scrolledTextComponent() 
     { 
      loaderIcon_mc.visible=true; 
      readSettingsXml(); 

     } 



     /* Other Functions */ 
     private function readSettingsXml() :void 
     { 
      if(__xmlSettingsPath != '') 
      { 
       //loaderIcon_mc.visible=false; 
       //read XML file 
       _loadSettingsXml.loadFile(__xmlSettingsPath); 
       _settingsXmlTimmer.addEventListener(TimerEvent.TIMER,settingsComponent); 
       _settingsXmlTimmer.start(); 
      } 

     } 

     //timmer 
     private function settingsComponent(event:TimerEvent):void { 
      //_settingsXmlTimmer.stop(); 
      //trace ("initial is running: "+_settingsXmlTimmer.running); 
      if (_loadSettingsXml.isxmlread && _settingsXmlTimmer.running) { 
       _settingsXmlTimmer.stop(); 
       //trace ("after is running: "+_settingsXmlTimmer.running); 

       loaderIcon_mc.visible=true; 
       loaderIcon_mc.x=(_loadSettingsXml._myXml.record[0].scrollComponentWidth-loaderIcon_mc.width)/2; 
       loaderIcon_mc.y=(_loadSettingsXml._myXml.record[0].scrollComponentHeight-loaderIcon_mc.height)/2; 



       _txt.width = _loadSettingsXml._myXml.record[0].scrollComponentWidth-40; 
       _txt.height = _loadSettingsXml._myXml.record[0].scrollComponentHeight; 
       _txt.mouseWheelEnabled=true; 
       _txt.multiline = true; 
       _txt.wordWrap = true; 
       _txt.selectable = true; 
       _txt.condenseWhite=true; 
       _txt.border=false; 

       _txt.x=0; 
       _txt.y=0; 



       if (_loadSettingsXml._myXml.record[0].cssStylesPath!='') { 
        _urlCSS=new URLRequest(_loadSettingsXml._myXml.record[0].cssStylesPath); 
        _loaderCSS.addEventListener(Event.COMPLETE, onCSSFileLoaded); 
        _loaderCSS.load(_urlCSS); 
       }    

      } 
     }    


     private function readHTML() :void 
     { 
      if (_loadSettingsXml._myXml.record[0].htmlPath!='') { 
       _urlHTML=new URLRequest(_loadSettingsXml._myXml.record[0].htmlPath); 
       _loaderHTML.addEventListener(Event.COMPLETE, onHTMLFileLoaded); 
       _loaderHTML.load(_urlHTML); 
      } 
     } 


     private function addHTMLandScroll() :void 
     { 
      addChild(_txt); 
      if (_txt.height<_txt.textHeight) { 
       _MyScrollBar.x=_txt.x+_txt.width+20; 
       _MyScrollBar.y=_txt.y+14; 
       _MyScrollBar._height=_txt.height-28; 
       _MyScrollBar._txt=_txt; 
       _MyScrollBar.scrollable_area_mc.height=_txt.height-28; 
       _MyScrollBar.scrollDownButton.y=_txt.height-14; 
       _MyScrollBar.initPublicVars(); 
       addChild(_MyScrollBar); 
      }   
     }  


     private function onCSSFileLoaded(event:Event):void { 
      _sheet.parseCSS(_loaderCSS.data); 
      //_timer_txt.styleSheet = sheet; 
      _txt.styleSheet = _sheet; 
      readHTML(); 
     }  

     private function onHTMLFileLoaded(event:Event):void { 
      _txt.htmlText = _loaderHTML.data; 
      loaderIcon_mc.visible=false; 
      addHTMLandScroll(); 
     }   


    } 

} 

Irgendwelche Ratschläge, wie man das macht? Ich bin irgendwie neu in diesem ..

Antwort

0

Nun von dem, was ich dir wünsche __xmlSettingsPath von außerhalb der Klasse jede Instanz gesetzt werden, Ritus ??

Sie sollten in Betracht ziehen, die Variable nicht zuerst zu initialisieren oder sie vielmehr auf eine leere Zeichenfolge zu setzen, da Sie die Überprüfungen an anderen Funktionen vorgenommen haben, an denen sie verwendet wird.

private var __xmlSettingsPath:String = ""; 

Ändern Sie den Konstruktor, um die Variable zu akzeptieren.

public function scrolledTextComponent (XmlPath:String) 
    { 
     __xmlSettingsPath:String = XmlPath; 

     loaderIcon_mc.visible=true; 
     readSettingsXml();  
    } 

Also im Grunde muss man die beiden oben genannten Änderungen vornehmen & während die Komponentenklasse als

new scrolledTextComponent(XmlPathforThisInstance) 

Hoffnung rufen Aufruf gibt es keine anderen Probleme, wie ich es nicht gut auf den Code aussah.


Edit:

verschiedene Instanzen anzurufen, können Sie Variablen deklarieren, um die diff Objekte zuweisen.

var FirstInstance: scrolledTextComponent = new scrolledTextComponent (FirstXmlPath)

var ThirdInstance: scrolledTextComponent = new scrolledTextComponent (ThirdXmlPath)

var FifthInstance: scrolledTextComponent = new scrolledTextComponent (FifthXmlPath)

.... so weiter

+0

Danke für die Antwort. Ich verstehe den ersten Teil, aber wie/wo werde ich den 2., 3., 4. .. scrolledtextcompnents nennen? – AlxSTi

+0

Sehen Sie sich die Bearbeiten an. – loxxy

Verwandte Themen