tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
916
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    OTurner OTurner ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    12
    Guten Morgen,
    ich habe mal eine Frage. Ist es möglich eine XML struktur in einen Haupfilm zu laden, diese in variable umzuändern und diese variablen dann an eine externe swf weiterzugeben
    und wenn ja, wie ist das denn möglich...da stosse ich an meine Grenzen.
    Bitte um Hilfe.
    Ich arbeite mit AS 3.
     

  2. #2
    Avatar von Denniz
    Denniz Denniz ist offline Mitglied Platin
    Registriert seit
    Mar 2006
    Beiträge
    558
    Hi,

    was meinst du mit externer swf?
    Eine swf die zur laufzeit in den Hautpfilm geladen wird oder eine swf die nichts mit dem eigentlichen Film zu tun hat und zB. auf einer anderen domain liegt?

    Mehr Infos....
     
    AS3/Flex - Java - ObjC - PHP


  3. #3
    OTurner OTurner ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    12
    ne ne sie wird nicht aus einer anderen Domain geladen, sie wird zur Laufzeit der main.swf geladen.
    Also ich kann ja mal mein Script darstellen, wie ich es bis jetzt gemacht habe, aber irgendwo liegt da drin ein Fehler..
    PHP-Code:
    var tor = [];
    var 
    kalender = [];
    var 
    aktTag = [];
    var 
    gutscheine = [];
    var 
    loader:URLLoader = new URLLoader();
    loader.load(new URLRequest("adventskalender.php.xml"));
    loader.addEventListener(Event.COMPLETEladeXML);
    function 
    ladeXML(evt:Event) {
        var 
    xml_dokument:XML = new XML(evt.target.data);
        
    xml_dokument.ignoreWhitespace true;
        
    xml_dokument.ignoreComments true;


        
    for 
    each (var knoten:XML in xml_dokument.aktTag) {
            
    trace("lade aktTag mit  " +knoten.text());
    }
    for 
    each (var knoten2:XML in xml_dokument.gutscheine.tor) {
          
    trace("lade tor mit " knoten2.@id );
        
    trace("lade inhalt "knoten2.inhalt.@typ);
          var 
    tor = new Object();
          
    tor.id knoten2.@id;
          
    tor.inhalt knoten2.inhalt.text();
          
    tor.typ knoten2.inhalt.@typ;
          
    gutscheine[gutscheine.length] = tor;
       }
       

    var 
    externeSWF:MovieClip;

    door1_mc.addEventListener(MouseEvent.CLICKpruefen);
    var 
    laden:Loader = new Loader();
    function 
    pruefenevent:Event ):void
         if (
    knoten == "1")  {
    laden.contentLoaderInfo.addEventListenerEvent.COMPLETElistener );
    laden.load( new URLRequest"tor_1_new.swf" ) ); 
        



    function 
    listenerevent:Event ):void{
        
    this.externeSWF laden.content as MovieClip;
        
    this.externesSWF.addXMLData(xml_dokument);
        
    addChildAtthis.externeSWF29 );
      
    }     
    }

    und im externen habe ich bis jetzt stehen..
    PHP-Code:
    function addXMLData(value:Array):void {
       
    tracevalue );

    kann jemand was damit anfangen?
     

  4. #4
    Avatar von Denniz
    Denniz Denniz ist offline Mitglied Platin
    Registriert seit
    Mar 2006
    Beiträge
    558
    Du übergibst der Funktion ein Objekt vom datentyp XML obwohl es ein Array will.
    PHP-Code:
     this.externesSWF.addXMLData(xml_dokument); 
    ...und jetzt seh ich's gerade (nächste mal bitten den code besser formatieren) das du die listener in der Funktion ladeXML verschachtelt hast.
    Schreibe diese außerhalb.
    Geändert von Denniz (29.11.09 um 14:17 Uhr)
     
    AS3/Flex - Java - ObjC - PHP


  5. #5
    OTurner OTurner ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    12
    und sowas darf man nicht machen? hast du eine Lösung für mich?
     

  6. #6
    Avatar von Denniz
    Denniz Denniz ist offline Mitglied Platin
    Registriert seit
    Mar 2006
    Beiträge
    558
    Entweder legst du fest welchen datentyp dein Argument habe soll und gibst auch ein Objekt von diesem Datentyp (Array , XML, ...)an die Funktion oder du kennzeichnest ein dynamischen Datentyp mit * - (strikte typisierung ist aber vorzuziehen)

    PHP-Code:
    function addXMLData(value:*):void {
       
    tracevalue );

     
    AS3/Flex - Java - ObjC - PHP


  7. #7
    OTurner OTurner ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    12
    cool, danke für die Aufklärung. Werde mich, wenn ich das alles hier geschafft habe, mich intensive mit strikter typisierung beschäftigen. Ich springe zur Zeit immer von einem Thema zum nächsten ohne mich dabei intensiv mit zu beschäftigen, da ist es gut, wenn man jemanden mal findet, der einem das erklärt. aber ich werde das alles nochmal in ruhe studieren. bücher und videomaterial ist da. nur die Zeit fehlt gerade.

    wie lese ich denn dann die geladene XML aus dem Hauptfilm im externen Movie aus sodass ich z.B. in einem dynamischen Textfeld einen wert eingetragen bekomme, der in einem XML knoten steht
     

  8. #8
    Avatar von Denniz
    Denniz Denniz ist offline Mitglied Platin
    Registriert seit
    Mar 2006
    Beiträge
    558
    Du hast ja deine XML schon geparsed und in einem Array gutscheine abgelegt:

    So könntest du darauf zugreifen:
    meinTextFeld.text = gutscheine[0].inhalt;
    Geändert von Denniz (29.11.09 um 23:43 Uhr)
     
    AS3/Flex - Java - ObjC - PHP


  9. #9
    OTurner OTurner ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    12
    Hey du danke, dass habe ich jetzt hinbekommen.
    Hier mal das Script vielleicht kann es jemand anderes auch gebrauchen
    PHP-Code:
    var tor = [];
    var 
    kalender = [];
    var 
    aktTag = [];
    var 
    gutscheine = [];
    var 
    loader:URLLoader = new URLLoader();
    loader.load(new URLRequest("adventskalender.php.xml"));
    loader.addEventListener(Event.COMPLETEladeXML);
    function 
    ladeXML(evt:Event) {
        var 
    xml_dokument:XML = new XML(evt.target.data);
        
    xml_dokument.ignoreWhitespace true;
        
    xml_dokument.ignoreComments true;


        
    for 
    each (var knoten:XML in xml_dokument.aktTag) {
            
    trace("lade aktTag mit  " +knoten.text());
    }
    for 
    each (var knoten2:XML in xml_dokument.gutscheine.tor) {
          
    trace("lade tor mit " knoten2 );
        
    trace("lade inhalt "knoten2.inhalt.@typ);
          var 
    tor = new Object();
          
    tor.id knoten2.@id;
          
    tor.inhalt knoten2.inhalt.text();
          
    tor.typ knoten2.inhalt.@typ;
          
    gutscheine[gutscheine.length] = tor
       }
       
    //xml einlesen und die knoten aus der XML ansprechen und ausgeben
       
       

    var externeSWF:MovieClip;

    door1_mc.addEventListener(MouseEvent.CLICKpruefen);
    var 
    laden:Loader = new Loader();
    function 
    pruefenevent:Event ):void
         if (
    knoten == "1")  {  // wenn der knoten "aktTag" der xml die zeichenkette "1" besitzt darf das törchen geöffnet werden
    laden.contentLoaderInfo.addEventListenerEvent.COMPLETElistener ); 
    laden.load( new URLRequest"tor_1_new.swf" ) ); 
        
    //addChildAt(laden, 28);
        
    close_btn.visible true;


    function 
    listenerevent:Event ):void{
        
    this.externesSWF laden.content as MovieClip;
        
    this.externesSWF.addXMLData(gutscheine);
        
    addChildAtthis.externesSWF28 );

    so und in der externen swf habe ich im script folgendes stehen
    PHP-Code:
    var gutscheine:Array;
    function 
    addXMLData(value:Array):void {
        
    gutscheine value;
        
    ladeTor(2);
    }

    function 
    ladeTor(nr:int):void {
     for 
    each ( var tor:Object in gutscheine )
     {
          
    trace"Tor ID: "tor.id );
          
    trace"Tor Typ: "tor.typ );
          
    trace"Tor Inhalt: "tor.inhalt );
          
    trace"------------------------------\n" );
       if (
    tor.id == 2)
       {
         if (
    tor.typ == "drucken") {
         
    drucken_txt.text tor.inhalt;
         
    teilnehmen_btn.visible true;
         
         }else if (
    tor.typ == "tagesverlosung") {
         
    tagesverlosung_txt.text tor.inhalt;
         
    tagesverlosung_btn.visible true;
         } else if(
    tor.typ == "texteingabe") {
         
    gutscheine_txt.text tor.inhalt;
         
    verlosung_btn.visible true;
         }
         break;
       }
     }

    meine Frage lautet jetzt, da meine externe Swf aus mehreren Frames besteht, wie kann das array "gutscheine" denn auf ein anderes Frame im gleichen Film übergeben, oder bestimmte Teile des Arrays?
     

  10. #10
    Avatar von Denniz
    Denniz Denniz ist offline Mitglied Platin
    Registriert seit
    Mar 2006
    Beiträge
    558
    Zitat Zitat von OTurner Beitrag anzeigen
    wie kann das array "gutscheine" denn auf ein anderes Frame im gleichen Film übergeben, oder bestimmte Teile des Arrays?
    Arrays, Variablen, Objekte stehen dir in jedem Frame des jeweiligen MovieClips in dem die deklariert wurden zur verfügung.
    Wie du darauf zugreifst hab ich ja oben schon gepostet.
     
    AS3/Flex - Java - ObjC - PHP


  11. #11
    OTurner OTurner ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    12
    soo ich habe es jetzt endlich geschafft die xml einzulesen...
    es sieht so aus
    PHP-Code:
    var laden_int:URLLoader = new URLLoader();
    laden_int.load(new URLRequest("adventskalender_int.xml"));
    laden_int.addEventListener(Event.COMPLETEladeXML2);
    var 
    daten:Object = {};
    var 
    kalender:Object = {};
    var 
    gutscheine:Array = [];




    function 
    ladeXML2(evt:Event) {
        var 
    xml_dokument_int:XML = new XML(evt.target.data);
        
    xml_dokument_int.ignoreWhitespace true;
        
    xml_dokument_int.ignoreComments true;


        
    for 
    each (var knoten:XML in xml_dokument_int.aktTag) {
            
    trace("lade aktTag mit  " +knoten);
            
    kalender[kalender.length] = knoten;
            var 
    aktTag = new Object();
            
    aktTag knoten.text();
    }
    for 
    each (var knoten2:XML in xml_dokument_int.gutscheine.tor) {
          
    trace("lade tor mit " knoten2 );
        
    trace("lade inhalt "knoten2.inhalt.@typ);
          var 
    tor = new Object();
          
    tor.id knoten2.@id;
          
    tor.inhalt knoten2.inhalt.text();
          
    tor.typ knoten2.inhalt.@typ;
          
    gutscheine[gutscheine.length] = tor;
          }
             
    trace("lade xml_dokument_int mit " daten );
             
    daten.studio xml_dokument_int.daten.studio.text();
       
    daten.sz_home_wo xml_dokument_int.daten.sz_home_wo.text();
       
    daten.studio xml_dokument_int.studio.text();
         
    daten.sz_home_wo xml_dokument_int.daten.sz_home_wo.text();
         
    daten.sz_home_name xml_dokument_int.daten.sz_home_name.text();
         
    daten.sz_home_strasse xml_dokument_int.daten.sz_home_strasse.text();
         
    daten.sz_home_plz xml_dokument_int.daten.sz_home_plz.text();
         
    daten.sz_home_ort xml_dokument_int.daten.sz_home_ort.text();
         
    daten.kontakt1 xml_dokument_int.daten.kontakt1.text();
         
    daten.kontakt2 xml_dokument_int.daten.kontakt2.text(); 
    sie wird auch an den externen Clip der in den Hauptfilm geladen wird übergeben..
    das Script dort schaut dann so aus
    PHP-Code:
    var gutscheine_int:Array;
    function 
    addXMLData_int(value:Array):void {
        
    gutscheine_int value;
        
    ladeTor_int(5);
    }

    function 
    ladeTor_int(nr:int):void {
     for 
    each ( var tor:Object in gutscheine_int )
     {
          
    trace"Tor ID: "tor.id );
          
    trace"Tor Typ: "tor.typ );
          
    trace"Tor Inhalt: "tor.inhalt );
          
    trace"------------------------------\n" );
          if(
    tor.id == 5)
       {
         if (
    tor.typ == "drucken") {
         
    teilnehmen_int_btn.visible true;
         
    drucken_txt.text tor.inhalt;
              
         } else if (
    tor.typ == "tagesverlosung") {
        
    tagesverlosung_int_btn.visible true
        
    drucken_txt.text tor.inhalt;
        
    //verdecken_mc.visible = false;
         
         
    }else if (tor.typ == "texteingabe") {
        
    verlosung_int_btn.visible true;
        
    drucken_txt.text tor.inhalt;
        
    //verdecken_mc.visible = false;
        
    }else{
            
    verlosung_ohne_btn.visible true;
            
    verdecken_btn.visible true;
        }        
        break;
       }
      }

    so jetzt habe ich aber noch eine Frage, da dieses Script auf dem ersten Frame liegt, wird die Ausgabe in den Textfeldern auch nur im ersten Frame angezeigt, wie schaffe ich es denn das in einem anderen Frame auch eine Ausgabe erscheint?
     

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 06.12.10, 08:38
  2. C++ Struktur an eine DLL übergeben
    Von Thurstan im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 08.07.08, 11:56
  3. definierte Struktur in einer dll übergeben
    Von stefano86 im Forum .NET Application und Service Design
    Antworten: 0
    Letzter Beitrag: 14.03.08, 08:25
  4. Struktur übergeben -Call by Reference
    Von chefsalat- im Forum VisualStudio & MFC
    Antworten: 8
    Letzter Beitrag: 22.06.07, 21:55
  5. Antworten: 4
    Letzter Beitrag: 22.02.05, 22:02