Anzeige

[AS3] xml-inhalt zuordnen und per tooltip ausgeben

[AS3] - xml-inhalt zuordnen und per tooltip ausgeben | PSD-Tutorials.de

Erstellt von waldmannvonritter, 06.02.2012.

  1. waldmannvonritter

    waldmannvonritter Nicht mehr ganz neu hier

    Dabei seit:
    13.08.2009
    Beiträge:
    79
    Geschlecht:
    männlich
    Ort:
    Oberasbach
    Software:
    CS6 Master
    Kameratyp:
    Canon 40D
    xml-inhalt zuordnen und per tooltip ausgeben
    Hallo Tutorialisten,

    ich würde gerne eine xml-liste erstellen und deren Inhalt Formatiert ausgeben.

    bsp:
    so dachte ich mir die xml-datei:

    HTML:
    1. <charinfo id="Hans">
    2.    <ausgabe>Hallo, ich bin der Hans.</ausgabe>
    3. </charinfo>
    4.  
    5. <charinfo id="Peter">
    6.    <ausgabe>Hallo, ich bin der Peter.</ausgabe>
    7. </charinfo>
    8.  
    9. <charinfo id="Oliver">
    10.    <ausgabe>Hallo, ich bin der Oliver.</ausgabe>
    11. </charinfo>
    im film wären da jetzt drei mc's mit den instanznamen hans,peter und oliver zu sehen und beim MouseOver soll der ausgabe-Text per tooltip zum jeweiligen mc angezeigt werden.

    Also das wäre das vorhaben. Ich hab jetzt schon eine tuts aus dem netz ausprobiert, aber keines funktioniert.

    Habs auch mit einer textdatei versucht... klappt aber auch irgendwie nicht ... für die textdatei benutzte ich:
    HTML:
    1. loadVariablesNum ("text.txt", "container");
    aber nichts tut sich. kein error. einfach ein blanker film wird angezeigt.:schmoll:

    dennoch würde ich aber die XML-Variante bevorzugen. Falls wer eine hilfestellung für mich hätte, wäre das echt super.

    Hoffe man versteht mich...


    gruß Tomas
     
    #1      
  2. ADcosmos

    ADcosmos Guest

    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Hi,

    1. die XML ist nicht ganz korrekt. Es fehlt ein Element, das alle umschließt. In etwa so:
    Code (Text):
    1. [COLOR="Red"]<char>[/COLOR]
    2. <charinfo id="Hans">
    3.    <ausgabe>Hallo, ich bin der Hans.</ausgabe>
    4. </charinfo>
    5.  
    6. <charinfo id="Peter">
    7.    <ausgabe>Hallo, ich bin der Peter.</ausgabe>
    8. </charinfo>
    9.  
    10. <charinfo id="Oliver">
    11.    <ausgabe>Hallo, ich bin der Oliver.</ausgabe>
    12. </charinfo>
    13. [COLOR="red"]</char>[/COLOR]
    2. In AS3 gibt es die URLLoader-Klasse, die für solche Daten zuständig ist.
    Code (Text):
    1. var loader:URLLoader=new URLLoader();
    2. loader.addEventListener(Event.COMPLETE, loadXMLHandler);
    3. loader.load(new URLRequest("pfadZurXML.xml"));
    4. function loadXMLHandler(e:Event):void{
    5.    var xml:XML=new XML(e.target.data);
    6.    trace(xml);
    7. }
    3. Ich hab es jetzt nicht getestet. Sollte aber so funktionieren.

    MFG ADcosmos
     
    #2      
  3. waldmannvonritter

    waldmannvonritter Nicht mehr ganz neu hier

    Dabei seit:
    13.08.2009
    Beiträge:
    79
    Geschlecht:
    männlich
    Ort:
    Oberasbach
    Software:
    CS6 Master
    Kameratyp:
    Canon 40D
    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Danke für den Kickstart :)

    Aber wie sprech ich das an?:uhm:

    ich hab ez da ein mc(hans_con), ein dyn.textfeld(hans_txt) und in den ersten frame vom mc hab ich jetzt:

    HTML:
    1. var xmlData:XML = new XML();
    2. var loader:URLLoader=new URLLoader();
    3.  
    4. loader.addEventListener(Event.COMPLETE, loadXMLHandler);
    5. loader.load(new URLRequest("charinfo.xml"));
    6.  
    7. hans_con.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
    8. hans_con.addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);
    9.  
    10. function loadXMLHandler(e:Event):void{
    11.    var xml:XML=new XML(e.target.data);
    12.    trace(xml);
    13. }
    14.  
    15. function manageMouseOver(event:MouseEvent):void{
    16.        hans_txt.text = xmlData.hans;
    17. }
    18.  
    19. function manageMouseOut(event:MouseEvent):void{
    20.   //keine ahnung
    21. }
    im compilerfenster wird dann die komplette xml-datei ausgelesen und im film passiert nichts ... kein hovereffect, aber auch kein fehler.

    Warum klapt das nicht?


    gruß Tomas
     
    #3      
  4. ADcosmos

    ADcosmos Guest

    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Hi,

    ich hab die Veränderungen mal mit rot markiert. So sollte es funktionieren. Kann man zwar ressourcenschonender umsetzen (ich meine die for-each-Schleife), aber egal. Das würde es nur komplizierter machen.

    Code (Text):
    1. var xmlData:XML = new XML();
    2. var loader:URLLoader=new URLLoader();
    3.  
    4. loader.addEventListener(Event.COMPLETE, loadXMLHandler);
    5. loader.load(new URLRequest("charinfo.xml"));
    6. [COLOR="red"]hans_con.name="Hans"; //name fuer manageMouseOver[/COLOR]
    7. hans_con.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
    8. hans_con.addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);
    9.  
    10. function loadXMLHandler(e:Event):void{
    11.    [COLOR="Red"]xmlData=new XML(e.target.data);[/COLOR]
    12.  
    13. }
    14.  
    15. function manageMouseOver(event:MouseEvent):void{
    16.     [COLOR="red"]for each ( var chars:XML in xmlData.charinfo){
    17.         if (event.target.name=="Hans" && chars.@id==event.target.name){//name des MCs: Hans
    18.             hans_txt.text = chars.ausgabe;
    19.             break;
    20.         }
    21.         //Fuer Peter waere es z.B.:
    22.         if (event.target.name=="Peter" && chars.@id==event.target.name){//name des MCs: Peter
    23.             peter_txt.text = chars.ausgabe;
    24.             break;
    25.         }
    26.     }[/COLOR]
    27. }
    28.  
    29. function manageMouseOut(event:MouseEvent):void{
    30.   [COLOR="red"]//moeglich waere:
    31. hans_txt.text=''"; //und das mit allen MCs.[/COLOR]
    32. }
    Wenn Du mehr solcher "Charaktere" hast, könntest Du auch Arrays oder (FlashPlayer 10 und größer) die Vector-Klasse (nicht zu verwechseln mit Vector3D). Wenn es aber sicher nur die drei bleiben, muss kein Array her.
     
    Zuletzt von einem Moderator bearbeitet: 06.02.2012
    #4      
  5. waldmannvonritter

    waldmannvonritter Nicht mehr ganz neu hier

    Dabei seit:
    13.08.2009
    Beiträge:
    79
    Geschlecht:
    männlich
    Ort:
    Oberasbach
    Software:
    CS6 Master
    Kameratyp:
    Canon 40D
    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Ja es werden insgesammt an die 26 charaktere sein. Und vielen Dank für dein script, aber nun krieg ich eine seltsame fehlermeldung.

    Error: Error #2078: Die Namenseigenschaft eines in die Zeitleiste eingefügten Objekts kann nicht geändert werden.
    at flash.display::DisplayObject/set name()
    at hover_fla::MainTimeline/frame1()

    ich hab mal das projekt hochgeladen. sind nur 6kb.
    http://www.datafilehost.com/download-b83125aa.html
     
    #5      
  6. ADcosmos

    ADcosmos Guest

    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Hi,

    wegen dem Fehler: mein Fehler:D

    Da Du den MC ja schon auf der Bühne hast und Bühnenelementen kann man keinen neuen Namen geben.
    Dementsprechend lösch die Zeile
    Code (Text):
    1. hans_con.name="Hans"; //name fuer manageMouseOver
    Dafür musst Du in der manageMouseOver-Methode das "Hans" durch "hans_con" ersetzen.

    Zu der angehängten Datei. Ich kann sie nicht öffnen. Liegt aber auch daran, dass ich nur CS4 habe.

    Zu dem Array (oder Vector), wenn Du es umsetzen möchtest: Vergiss den Teil, den ich gerade schrieb (Hans zu ersetzen) und mache das folgende. Zuerst das, was Du oben im Skriptfenster schreiben kannst.
    Code (Text):
    1. var mcArray:Array= new Array(); //beinhaltet die Referenz auf die MC
    2. var txtStringArray:Array= new Array(); //beinhaltet die Texte fuer die MC
    3. var txtArray:Array = new Array(); //beinhaltet die Textfelder
    4. mcArray.push(hans_con);
    5. txtArray.push(hans_txt);
    6. mcArray.push(peter_con);
    7. txtArray.push(peter_txt);//Und so weiter, Achte darauf, dass die Reihenfolge beibehalten wird, die Du in der XMl-Datei hast. Also erst Hans, dann Peter, dann Oliver, ...
    8.  
    9. //Nun die EventListener MouseOut/Over bzw. in Deinem Fall RollOut/Over:
    10. for (var i:int=0; i<mcArray.length(); i++){
    11.     mcArray[i].addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
    12.     mcArray[i].addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);
    13.  
    14. }
    15.  
    16.  
    In der loadXMLHandler-Methode:
    Code (Text):
    1. var xmlData:XML=new XML(e.target.data);
    2. for each ( var chars:XML in xmlData.charinfo){
    3.    txtStringArray.push(chars.ausgabe);
    4. }
    5.  
    xmlData brauchst Du dann eigentlich gar nicht als globale Variable und kannst Sie aus der ersten Zeile (deines letzten Postings) löschen.

    In der Methode manageMouseOver:

    Code (Text):
    1. for (var i:int=0; i<mcArray.length(); i++){
    2.     if (event.target==mcArray[i]){
    3.         txtArray[i].text=txtStringArray[i];
    4.         break;
    5.     }
    6. }
    Und dann die manageMouseOut-Methode:

    Code (Text):
    1. for (var i:int=0; i<txtArray.length(); i++){
    2.     txtArray[i].text="";
    3. }
    So, das sollte eigentlich funktionieren.

    Mir ist noch etwas eingefallen. Du könntest WAHRSCHEINLICH sogar alles von der XML-Datei steuern. Also Name und Position der MCs und der Textfelder. So müsstest Du nur die XML-Datei ändern und KÖNNTEST dann sehr einfach einen 27. Charakter "erstellen" ohne die Flash-Datei zu ändern. Hängt aber davon ab, wie genau Du das Design haben möchtest.

    MFg ADcosmos
     
    Zuletzt von einem Moderator bearbeitet: 06.02.2012
    #6      
  7. waldmannvonritter

    waldmannvonritter Nicht mehr ganz neu hier

    Dabei seit:
    13.08.2009
    Beiträge:
    79
    Geschlecht:
    männlich
    Ort:
    Oberasbach
    Software:
    CS6 Master
    Kameratyp:
    Canon 40D
    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    puh... alter schwede O.O das ist soo genial aber ... ich krieg lauter errors:

    Zeile 1,7,8 undefinierte Eigenschaft (e, loader, loader). Hab ich die reihenfolge verpatzt?

    ----------

    var xmlData:XML=new XML(e.target.data);

    for each ( var chars:XML in xmlData.charinfo){
    txtStringArray.push(chars.ausgabe);
    }

    loader.addEventListener(Event.COMPLETE, loadXMLHandler);
    loader.load(new URLRequest("charinfo.xml"));

    var mcArray:Array= new Array(); //beinhaltet die Referenz auf die MC
    var txtStringArray:Array= new Array(); //beinhaltet die Texte fuer die MC
    var txtArray:Array = new Array(); //beinhaltet die Textfelder
    mcArray.push(hans_con);
    txtArray.push(hans_txt);
    mcArray.push(peter_con);
    txtArray.push(peter_txt);//Reihenfolge beibehalten XMl-Datei.

    //Nun die EventListener MouseOut/Over bzw. in Deinem Fall RollOut/Over:
    for (var i:int=0; i<mcArray.length(); i++){
    mcArray.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
    mcArray.addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);

    }

    function loadXMLHandler(e:Event):void{
    xmlData=new XML(e.target.data);

    }

    function manageMouseOver(event:MouseEvent):void{
    for (var i:int=0; i<mcArray.length(); i++){
    if (event.target==mcArray){
    txtArray.text=txtStringArray;
    break;
    }
    }
    }

    function manageMouseOut(event:MouseEvent):void{
    for (var i:int=0; i<txtArray.length(); i++){
    txtArray.text="";
    }
    }

    ----------



    gruß Tomas
     
    #7      
  8. ADcosmos

    ADcosmos Guest

    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Hi,

    Nein. Das liegt nur daran, dass ich in meinen Methode immer e:Event oder e:MouseEvent schreibe. Du nutzt aber meiste event:MouseEvent. Das müsstest Du nur korrigieren.

    ich gehe jetzt mal davon aus, dass dein letzter Beitrag, das gesamte Script von Dir beinhaltet.

    Code (Text):
    1.  
    2. //Den folgenden Teil wurde ich hier schreiben. Variablendeklarationen immer ganz nach oben. Sonst sucht man sich ja den Wolf ;)
    3. var mcArray:Array= new Array(); //beinhaltet die Referenz auf die MC
    4. var txtStringArray:Array= new Array(); //beinhaltet die Texte fuer die MC
    5. var txtArray:Array = new Array(); //beinhaltet die Textfelder
    6. mcArray.push(hans_con);
    7. txtArray.push(hans_txt);
    8. mcArray.push(peter_con);
    9. txtArray.push(peter_txt);//Reihenfolge beibehalten XMl-Datei.
    10.  
    11. //jetzt erst die URLLoader-EventListener erstellen
    12. var loader:URLLoader=new URLLoader();
    13. loader.addEventListener(Event.COMPLETE, loadXMLHandler);
    14. loader.load(new URLRequest("charinfo.xml"));
    15. //Nun die EventListener MouseOut/Over bzw. in Deinem Fall RollOut/Over:
    16. for (var i:int=0; i<mcArray.length; i++){
    17.     mcArray[i].addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
    18.     mcArray[i].addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);
    19.  
    20. }
    21.    
    22. function loadXMLHandler(e:Event):void{
    23.    var xmlData:XML= new XML(e.target.data);
    24.    for each ( var chars:XML in xmlData.charinfo){
    25.       txtStringArray.push(chars.ausgabe);
    26.    }
    27. }
    28.  
    29. function manageMouseOver(event:MouseEvent):void{
    30.     for (var i:int=0; i<mcArray.length; i++){
    31.         if (event.target==mcArray[i]){
    32.             txtArray[i].text=txtStringArray[i];
    33.             break;
    34.         }
    35.     }
    36. }
    37.  
    38. function manageMouseOut(event:MouseEvent):void{
    39.     for (var i:int=0; i<txtArray.length; i++){
    40.         txtArray[i].text="";
    41.     }
    42. }
    So. Das sollte jetzt alles gewesen sein.

    MFg ADCosmos
     
    Zuletzt von einem Moderator bearbeitet: 06.02.2012
    #8      
  9. waldmannvonritter

    waldmannvonritter Nicht mehr ganz neu hier

    Dabei seit:
    13.08.2009
    Beiträge:
    79
    Geschlecht:
    männlich
    Ort:
    Oberasbach
    Software:
    CS6 Master
    Kameratyp:
    Canon 40D
    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Ez net haun...

    hab ein error noch:
    TypeError: Error #1006: value ist keine Funktion.

    hat das etwas mit der for-schleife zu tun ^^ ?


    gruß tomas
     
    #9      
  10. ADcosmos

    ADcosmos Guest

    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Hi,

    Nein, nicht ganz. Ein Array-Objekt hat keine length-Funktion. Es ist nur eine Instanzvariable.
    Heißt für Dich: Dreimal darfst Du () nach dem length entfernen. Tritt jeweils in den for-Schleifen auf.
    In meinem letzten Beitrag habe ich die Fehler jetzt korrigiert.

    MFg ADcosmos
     
    #10      
  11. waldmannvonritter

    waldmannvonritter Nicht mehr ganz neu hier

    Dabei seit:
    13.08.2009
    Beiträge:
    79
    Geschlecht:
    männlich
    Ort:
    Oberasbach
    Software:
    CS6 Master
    Kameratyp:
    Canon 40D
    xml-inhalt zuordnen und per tooltip ausgeben
    AW: xml-inhalt zuordnen und per tooltip ausgeben

    Vielen Herzlichen Dank. Genau das war es!


    gruß Tomas
     
    #11      
x
×
×