2010-12-10 3 views
0

J'ai un scroller de contenu dans mon projet Flash CS5/AS3 que je veux utiliser à plusieurs endroits, tout en chargeant un contenu différent (html) à chacun de ces différents endroits.Les variables de codage Flash AS3 initialisées différemment pour chaque appel

Vous trouverez ci-dessous le code AS3 du composant de texte déroulant. Le fichier 'compnentsettings.xml' est l'endroit où je définis le fichier .html à appeler.

À l'heure actuelle, le déflecteur ne fonctionne que sur un seul point. Je peux le cloner, mais bien sûr, il chargera les mêmes données.

Je crois que je dois modifier la fonction de settingsComponent de scrolledTextComponent.as (ci-dessous) pour charger différents fichiers compnentSettings.xml

je besoin du __xmlSettingsPath variable initialisée différent pour chaque appel et je ne sais pas comment faire ce. S'il vous plaît aider!

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


    } 

} 

Un conseil sur la façon de procéder? Je suis un peu nouveau à ce ..

Répondre

0

Eh bien à partir de ce que je reçois, vous souhaitez __xmlSettingsPath à mettre en dehors de la classe chaque Instance, rite ??

Vous pouvez envisager de ne pas initialiser la variable en premier, ou plutôt la définir sur une chaîne vide car vous avez les contrôles en place à d'autres fonctions où elle est utilisée.

private var __xmlSettingsPath:String = ""; 

Modifiez le constructeur pour accepter la variable.

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

     loaderIcon_mc.visible=true; 
     readSettingsXml();  
    } 

Donc, fondamentalement, vous devez faire les deux changements ci-dessus & tout en appelant la classe de composant appeler comme

new scrolledTextComponent(XmlPathforThisInstance) 

espoir il n'y a pas d'autres problèmes que je ne l'ai pas regardé bien au code.


Edit:

Pour appeler les différentes instances, vous pouvez déclarer des variables pour affecter les objets diff.

var FirstInstance: scrolledTextComponent = new scrolledTextComponent (FirstXmlPath)

var ThirdInstance: scrolledTextComponent = new scrolledTextComponent (ThirdXmlPath)

var FifthInstance: scrolledTextComponent = new scrolledTextComponent (FifthXmlPath)

.... ainsi de suite

+0

Merci pour la réponse. Je comprends la première partie, mais comment/où vais-je appeler les 2ème, 3ème, 4ème ... scrolledtextcompnents? – AlxSTi

+0

Regardez le Modifier. – loxxy