Antworten auf deine Fragen:
Neues Thema erstellen

xml-inhalt zuordnen und per tooltip ausgeben

waldmannvonritter

Nicht mehr ganz neu hier

Hallo Tutorialisten,

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

bsp:
so dachte ich mir die xml-datei:

HTML:
<charinfo id="Hans">
   <ausgabe>Hallo, ich bin der Hans.</ausgabe>
</charinfo>

<charinfo id="Peter">
   <ausgabe>Hallo, ich bin der Peter.</ausgabe>
</charinfo>

<charinfo id="Oliver">
   <ausgabe>Hallo, ich bin der Oliver.</ausgabe>
</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:
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
 

A

ADcosmos

Guest

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:
[COLOR="Red"]<char>[/COLOR]
<charinfo id="Hans">
   <ausgabe>Hallo, ich bin der Hans.</ausgabe>
</charinfo>

<charinfo id="Peter">
   <ausgabe>Hallo, ich bin der Peter.</ausgabe>
</charinfo>

<charinfo id="Oliver">
   <ausgabe>Hallo, ich bin der Oliver.</ausgabe>
</charinfo>
[COLOR="red"]</char>[/COLOR]

2. In AS3 gibt es die URLLoader-Klasse, die für solche Daten zuständig ist.
Code:
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, loadXMLHandler);
loader.load(new URLRequest("pfadZurXML.xml"));
function loadXMLHandler(e:Event):void{
   var xml:XML=new XML(e.target.data);
   trace(xml);
}

3. Ich hab es jetzt nicht getestet. Sollte aber so funktionieren.

MFG ADcosmos
 

waldmannvonritter

Nicht mehr ganz neu hier

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:
var xmlData:XML = new XML();
var loader:URLLoader=new URLLoader();

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

hans_con.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
hans_con.addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);

function loadXMLHandler(e:Event):void{
   var xml:XML=new XML(e.target.data);
   trace(xml);
}
 
function manageMouseOver(event:MouseEvent):void{
       hans_txt.text = xmlData.hans;
}
 
function manageMouseOut(event:MouseEvent):void{
  //keine ahnung
}
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
 
A

ADcosmos

Guest

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:
var xmlData:XML = new XML();
var loader:URLLoader=new URLLoader();

loader.addEventListener(Event.COMPLETE, loadXMLHandler);
loader.load(new URLRequest("charinfo.xml"));
[COLOR="red"]hans_con.name="Hans"; //name fuer manageMouseOver[/COLOR]
hans_con.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
hans_con.addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);

function loadXMLHandler(e:Event):void{
   [COLOR="Red"]xmlData=new XML(e.target.data);[/COLOR]
 
}
 
function manageMouseOver(event:MouseEvent):void{
	[COLOR="red"]for each ( var chars:XML in xmlData.charinfo){
		if (event.target.name=="Hans" && chars.@id==event.target.name){//name des MCs: Hans
			hans_txt.text = chars.ausgabe;
			break;
		}
		//Fuer Peter waere es z.B.:
		if (event.target.name=="Peter" && chars.@id==event.target.name){//name des MCs: Peter
			peter_txt.text = chars.ausgabe;
			break;
		}
	}[/COLOR]
}
 
function manageMouseOut(event:MouseEvent):void{
  [COLOR="red"]//moeglich waere:
hans_txt.text=''"; //und das mit allen MCs.[/COLOR]
}

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 bearbeitet von einem Moderator:

waldmannvonritter

Nicht mehr ganz neu hier

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
 
A

ADcosmos

Guest

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:
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:
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);//Und so weiter, Achte darauf, dass die Reihenfolge beibehalten wird, die Du in der XMl-Datei hast. Also erst Hans, dann Peter, dann Oliver, ...

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

}

In der loadXMLHandler-Methode:
Code:
var xmlData:XML=new XML(e.target.data);
for each ( var chars:XML in xmlData.charinfo){
   txtStringArray.push(chars.ausgabe);
}

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:
for (var i:int=0; i<mcArray.length(); i++){
	if (event.target==mcArray[i]){
		txtArray[i].text=txtStringArray[i];
		break;
	}
}

Und dann die manageMouseOut-Methode:

Code:
for (var i:int=0; i<txtArray.length(); i++){
	txtArray[i].text="";
}

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 bearbeitet von einem Moderator:

waldmannvonritter

Nicht mehr ganz neu hier

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
 
A

ADcosmos

Guest

AW: xml-inhalt zuordnen und per tooltip ausgeben

Hi,

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?

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:
//Den folgenden Teil wurde ich hier schreiben. Variablendeklarationen immer ganz nach oben. Sonst sucht man sich ja den Wolf ;)
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.

//jetzt erst die URLLoader-EventListener erstellen
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, loadXMLHandler);
loader.load(new URLRequest("charinfo.xml"));
//Nun die EventListener MouseOut/Over bzw. in Deinem Fall RollOut/Over:
for (var i:int=0; i<mcArray.length; i++){
	mcArray[i].addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
	mcArray[i].addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);

}
   
function loadXMLHandler(e:Event):void{
   var xmlData:XML= new XML(e.target.data);
   for each ( var chars:XML in xmlData.charinfo){
      txtStringArray.push(chars.ausgabe);
   }
}

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

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

So. Das sollte jetzt alles gewesen sein.

MFg ADCosmos
 
Zuletzt bearbeitet von einem Moderator:

waldmannvonritter

Nicht mehr ganz neu hier

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
 
A

ADcosmos

Guest

AW: xml-inhalt zuordnen und per tooltip ausgeben

Hi,

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

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
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben