{lang: 'de'}
Flashhilfe.de - Flash Community

XML Daten in AS3 auslesen [Flash 11]

 


AntwortenRegistrieren Seite1  

stella2111#1
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

30.05.2011, 12:38

Also i habe die Flash Professional CS5 zur verfügung. leider konnte ich diese oben nicht auswählne. Arbeite mit AS3.

also i hab folgendes Problem 
//Folgende XML Struktur ist gegeben.
<inhalt id="id9">
   <vid namen="video" src="video/zimmer.flv"/>
   <ausgabe>Wer soll kommen, Maria oder Ramona?</ausgabe>
   <naechste rid="id10"/>
   <naechste rid="id11"/>
</inhalt>

<inhalt id="id10">
   <vid namen="Maria" src="video/maria.flv"/>
   <ausgabe>Wer soll kommen, Maria oder Ramona?</ausgabe>
   <naechste rid="id12"/>
   <naechste rid="id13"/>
</inhalt>

<inhalt id="id11">
   <vid namen="Ramona" src="video/ramona.flv"/>
   <ausgabe></ausgabe>
   <naechste rid="id14"/>
   <naechste rid="id15"/>
</inhalt> 
Mein Problem ist folgendes.
Die naechste rid gibt an welche sequenz als nächstes abgespielt werden soll.

Wie sage ich in AS3,  wenn du zwei naechste rid siehst in der „id=id9“ z.B., erstell zwei buttons und in dem einen button machst du den namen von dem vid aus der id10 und in dem anderen button den namen von der id11 und nimmst dir dementsprechend die jeweilige sequenz??????(Die buttons werden schon erstellt, ich bekomme leider nur nicht den richtigen namen aus) Ich bekomme immer nur den namen, von der inhalt in dem ich mich befinde, aber des will i ja net, ich will dass die nächstfolgende sequenz geladen wir und demensprechend dann die richtige buttennamen (vid.@namen) dazu, nur weiss i gerade net wie ich da richtig drauf zugreifen soll.

des heisst, wenn ich jetzt z.b. bei der id="9" bin und die sequenz zimmer abgespielt wird, kommen am ende dieser sequenzen zwei buttons. in dem ersten button sollte der vid namen von der id="10" stehen, in dem zweiten button, der vidnamen von der id="11".
Also das mit der Sequenz konnte ich zum Teil folgendermaßen lösen:
var rididentifikation = xmlDaten.inhalt[position].naechste.@rid;
ns.play(String(xmlDaten.inhalt.(@id == rididentifikation).vid.@src),0)
damit wird die sequenz der nachsten rid angezeigt. Nur bei den buttons bin ich leider überfragt.
Schlagwörter: AS3, sprünge, xml
stella2111#2
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

30.05.2011, 13:38

ich bin am verzweifeln ... des gibts doch net, des kann doch net so schwer sein, aber wieso komm i net drauf. :(
springer#3
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

30.05.2011, 17:59

hi,
zur info, das hier:
ActionScript:
1xmlDaten.inhalt.(@id == rididentifikation)

gibt immer eine liste, auch wenn es nur einmal zutrifft... ;-)
demnach funktioniert das:
ActionScript:
1xmlDaten.inhalt.(@id == rididentifikation).vid.@src

nur bedingt...

so kommst du an die richtigen werte:

ActionScript:
1
2
3
4
5
var n:String = this.xml.inhalt[ 0 ].naechste[ 0 ].@rid;
var m:String = this.xml.inhalt[ 0 ].naechste[ 1 ].@rid;
         
var name:String = this.xml.inhalt.(@id==n)[0].vid.@namen; // Maria
var name2:String = this.xml.inhalt.(@id==m)[0].vid.@namen; // Ramona
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 30.05.11 um 18:01 Uhr
stella2111#4
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

31.05.2011, 08:36

okay vielen dank für die antwort.

also wenn diese zeile

ActionScript:
1xmlDaten.inhalt.(@id == rididentifikation).vid.@src


nur bedingt funktioniert, wie kann ich sie umschreiben damit sie immer funktioniert!??!?!

dann hätte ich noch eine frage. also ich habe in der einen player_main datei die ganzen textfeld und textformat sachen drin. kann man die nicht irngedwie in eine klasse packen und diese dann aufrufen, denn es sind sehr viele zeilen und die machen den code total unübersichtlich
springer#5
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

31.05.2011, 10:47

>> wie kann ich sie umschreiben damit sie immer funktioniert!??!?!

wie oben beschrieben ;-)

zu 2.:

ja kann man in eine klasse packen:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package
{
     import flash.text.TextFormat;
 
     public class TextFormatter
     {
        public static function get normalText():TextFormat{
           var tf:TextFormat = new TextFormat();
           return tf;
        }
        
        public static function get boldText():TextFormat{
           var tf:TextFormat = new TextFormat();
           tf.bold = true;
           return tf;
        }
     }
}


zuweisen dann so:
ActionScript:
1deinTextFeld.defaultTextFormat = TextFormatter.normalText;
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
stella2111#6
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

31.05.2011, 11:33

test test
Geändert von stella2111 am 31.05.11 um 11:56 Uhr
stella2111#7
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

31.05.2011, 11:55

hmm habs jetzt so versucht:

in der klasse:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package mc_klassen
{
       import flash.text.TextFormat;
 
       public class Textformatter
       {
          public static function get ausgabete():TextFormat{
             //Format für den Ausgabetext
         var ausgabetextFormat:TextFormat = new TextFormat();
           ausgabetextFormat.font = "Arial";
           ausgabetextFormat.size = 24;
           ausgabetextFormat.color = 0x000000;   
           ausgabetextFormat.align = TextFormatAlign.CENTER;
           return ausgabetextFormat;
          }
         
       }
}


ActionScript:
1
2
3
4
5
6
7
8
9
10
var ausgabet = xmlDaten.inhalt[position].naechste[0].@rid[0];
var ausgabetext2:String = xmlDaten.inhalt.(@id == ausgabet)[0].ausgabe.text();
ausgabetext.text = ausgabetext2;
ausgabetext.x = 100;
ausgabetext.y = 100;
ausgabetext.width = 600;
ausgabetext.height = 100;
ausgabetext.wordWrap=true;
addChild(ausgabetext);
ausgabetext.setTextFormat(Textformatter.ausgabete);


irgendwie will des aber net. er bringt mir als meldung folgendes:
Zugriff auf eine nicht definierte Eigenschaft Textformatter
springer#8
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

31.05.2011, 12:10

import nicht vergessen...

ActionScript:
1import mc_klassen.Textformatter
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
stella2111#9
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

31.05.2011, 12:18

hab des jetzt gemacht.
aber die meldung bleibt die gleiche ....
Geändert von stella2111 am 31.05.11 um 12:24 Uhr
stella2111#10
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

31.05.2011, 12:32

hat geklappt. ich hätte die klasse wie die as datei bennen sollen. ich blöde ...
danke!!!
stella2111#11
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

01.06.2011, 13:44

hallo,
hab immer noch ein problem mit dem laden.
also die xml struktur ist immer noch dieselbe ... daran aht sich nichts geändert.

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<inhalt id="id1">
   <vid namen="blabla" src="video/blabla.flv"/>
   <ausgabe></ausgabe>
   <naechste rid="id2"/>
</inhalt>

<inhalt id="id2">
   <vid namen="Abstellkammer" src="video/abstellkammer.flv"/>
   <ausgabe>Wer soll kommen, Maria oder Ramona?</ausgabe>
   <naechste rid="id3"/>
   <naechste rid="id4"/>
</inhalt>

<inhalt id="id3">
   <vid namen="Maria" src="video/maria_laura_abstellkammer.flv"/>
   <ausgabe></ausgabe>
   <naechste rid="id4"/>
   <naechste rid="id5"/>
</inhalt> 

hab leider immer no des problem, dass wenn die folgende funktion aufgerufen wird, er die id1 einfach überspringt und weiter macht. dann geht er zur id2, dann klappts kurz wieder und dann spinnt der player wieder und springt in die falsche id rein ...

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
private function playVid(p_intVid:uint = 0, p_bolPlay:Boolean = true):void {
     var playStatus:Boolean = false;
     position = p_intVid;
     playStatus = p_bolPlay;
     var ridi:String = xmlDaten.inhalt[position].naechste[0].@rid[0];
     if(playStatus) {
      tmrDisplay.stop();
      ns.play(String(xmlDaten.inhalt.(@id == ridi)[0].vid.@src));
     } else {
      strSource = xmlDaten.inhalt.(@id == ridi)[0].vid.@src;
     }
     film_ausgabe.visible = true;
}   


in der funktion statusverarbeitung hab ich zwei fälle. stream wurde nicht gefunde, bzw ist da und es folgen noch mehrere sequenzen. dann sag ich mit ner if abfrage, wenn naechste rid == 1, mach ...
wenn naechste rid == 2, mach ...
wenn na ......... == 3, mach ....

was ich gemerkt habe, er springt mir leider nicht immer im richtigen rein, daher gibt er mir ja auch die falschen sachen aus, bzw wiederholt die sequenzen einfach.

und die erste sequenz an der id="1" wird gar nicht abgepsielt. also wenn ich den else teil von der fkt playVid etwas veränder, dann wird wurd video 1 gezeigt, dafür nicht video 2. lass ich es so, bekomm ich 1 nicht abgespielt, dafür die 2 ....

versteh ich echt beim besten willen net ....
stella2111#12
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

22.06.2011, 10:00

hmmm, leider bin ich noch auf keine lösung gekommen ... :(
springer#13
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

22.06.2011, 11:45

bei attributen brauchts keinen array-zugriff ;-)
ActionScript:
1var ridi:String = xmlDaten.inhalt[position].naechste[0].@rid


abermal angenommen du übergibst folgendes:

ActionScript:
1playVid(0,true);


ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
private function playVid(p_intVid:uint = 0, p_bolPlay:Boolean = true):void {
       var playStatus:Boolean = false;
       position = p_intVid; // ---> 0
     playStatus = p_bolPlay; // --> true
     var ridi:String = xmlDaten.inhalt[position].naechste[0].@rid; // --> das wäre "id2"
     if(playStatus) {
        tmrDisplay.stop();
        ns.play(String(xmlDaten.inhalt.(@id == ridi)[0].vid.@src)); // --> wäre "video/abstellkammer.flv"
     } else {
        strSource = xmlDaten.inhalt.(@id == ridi)[0].vid.@src;
       }
       film_ausgabe.visible = true;
}
 

mit diesem script wird das erste video nie abgespielt. wie sollte dann die reihenfolgen sein?

so?

-video/blabla.flv
-video/abstellkammer.flv
-video/maria_laura_abstellkammer.flv
-(video aus id4)
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
stella2111#14
Benutzerbild von stella2111
Beiträge: 11
Registriert: Dec 2010

Themenautor/in

24.06.2011, 19:52

hallo, danke für die antwort.
ja die reihenfolge wäre wie du schon geschrieben hast z.B.
1. blabla.flv
2. abstellkammer.flv
3. je nachdem welcher button angeklickt wurde, film aus id3 oder aus id4
4. usw.
also ich denke wirklich des ist ne kleinigkeit die da net so richtig funktioniert ....
oioioioi, ne katastrophe ;)



<inhalt id="id1">
   <vid namen="blabla" src="video/blabla.flv"/>
   <ausgabe></ausgabe>
   <naechste rid="id2"/>
</inhalt>

<inhalt id="id2">
   <vid namen="Abstellkammer" src="video/abstellkammer.flv"/>
   <ausgabe>Wer soll kommen, Maria oder Ramona?</ausgabe>
   <naechste rid="id3"/>
   <naechste rid="id4"/>
</inhalt>

<inhalt id="id3">
   <vid namen="Maria" src="video/maria_laura_abstellkammer.flv"/>
   <ausgabe></ausgabe>
   <naechste rid="id4"/>
   <naechste rid="id5"/>
</inhalt>

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de