Antworten auf deine Fragen:
Neues Thema erstellen

AS3 Inhalt über switch füllen

johanna52

Interessierte

Hallo alle zusammen,
jetzt stehe ich vollkommen auf dem Schlauch. Ich habe eine Navigation mit einem Container über switch gebaut. Um die Seiten zu füllen, muß ich also den Inhalt innerhalb von case füllen. Bisher klappt dies nur mit Text bzw. htmlText. Nun wollte ich aber auch auf Seite 1 einen externen swf auf eine Seite reinholen. Hier fängt das Problem an - es wird nicht angezeigt.
Bei Klick auf den Button zu Seite 1 erscheint unter Ausgabe:
TypeError: Error #2007: Parameter listener darf nicht 'null' sein.
at flash.events::EventDispatcher/addEventListener()
at buttonAS_fla::MainTimeline/onClick()

Code:
buttons_mc.addEventListener(MouseEvent.CLICK, onClick);
function onClick (e:MouseEvent):void 
{
switch(e.target.name) 
{
	case "eins_btn":  
	con_mc.con_txt.text= "Seite 01"
//neue Loader Instanz mit leerem Movieclip
var loader:Loader = new Loader();
loader.load(new URLRequest("ani.swf")); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,SWF1);
function SWF1(e:Event):void { 
con_mc.leer_mc.addChild(loader);
}
	break; 
	case "zwei_btn": 
	con_mc.con_txt.htmlText= "Seite 02<br>hier eine schöne Gartenblume<br><a href='http://www.xxxx.de'><img src='../img/blume.jpg'></a>und das Ganze ist verlinkt auf meine Homepage"
	break; 
	case "drei_btn": 
	con_mc.con_txt.text= "Seite 03"
	break;
	case "vier_btn": 
	con_mc.con_txt.text= "Seite 04"
	break;
}
}

Bin für jeden Tipp dankbar.
 

A

ad86

Guest

AW: AS3 Inhalt über switch füllen

Hi,

also bei mir funktioniert es. (Ohne der Aufruf der SWF1-Methode)

1. Versuche mal alle paar Zeilen ein
Code:
trace("zeile x");
zu machen, wo genau der Fehler liegt.

2. Schreib mal die Methode SWF1 ausserhalb der switch-Anwesiung UND ändere sie etwas ab
Code:
function SWF1(e:Event):void { 
con_mc.leer_mc.addChild(e.target);
}

MFG ad86
 

johanna52

Interessierte

AW: AS3 Inhalt über switch füllen

danke für die schnelle Antwort.

Das mit dem trace hatte ich schon probiert, das geht durch bis loader.contentLoaderInfo ...
danach wird nichts mehr angezeigt.

Außerhalb von case wird der Film mit
leer_mc.addChild(loader);
auf alles Seiten angezeigt.


mit
con_mc.leer_mc.addChild(e.target);
und mit
con_mc.leer_mc.addChild(loader);
bekomme ich folgende Fehlermeldung:

TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
 
A

ad86

Guest

AW: AS3 Inhalt über switch füllen

Hi,

1. die SWF1-methode sollte trotzdem außerhalb bleiben, da es eher schlechter Programmierstil ist.

2. Was passiert, wenn Du in dieser Methode vor der Anweisung
Code:
con_mc.leer_mc.addChild(e.target);

folgendes schreibst:

Code:
trace(con_mc);
trace(con_mc.leer_mc);
trace(e.target);

Die Ausgaben kannst Du ja dann posten.

MFG ad86
 

keul3

3dsMax | 3D-Contest

AW: AS3 Inhalt über switch füllen

Ich würds mal weniger verschachtelt schreiben, du deklarierst eine Funktion innerhalb einer Funktion. Sowas schafft Konfliktmaterial, außerdem verliert man so schneller die Übersicht.

con_mc und leer_mc hast du auf der Stage liegen oder in AS deklariert?
 

johanna52

Interessierte

AW: AS3 Inhalt über switch füllen

also ich arbeite zur Zeit noch mit der Bühne - mit Klassen und package usw. muß ich mich dann noch später beschäftigen. Bin also noch am Anfang.

jetzt habe ich vor dem switsch folgenden Code stehen:
Code:
//neue Loader Instanz mit leerem Movieclip
var loader:Loader = new Loader();
//Laden externe Daten
loader.load(new URLRequest("ani.swf")); //Abfrage fertig geladen 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,SWF1);
//trace("zeile x");
//Erst wenn fertig geladen, dann per addChild dem Container hinzufügen 

function SWF1(e:Event):void { 
//con_mc.leer_mc.addChild(loader);
trace(con_mc);
trace(con_mc.leer_mc);
trace(e.target);
con_mc.leer_mc.addChild(e.target);
}

beim Film testen wird der ani.swf nicht angezeigt und im Ausgabefenster nun ausgegeben:

[object MovieClip]
undefined
[object LoaderInfo]
TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at buttonAS_fla::MainTimeline/SWF1()
 
Zuletzt bearbeitet:
A

ad86

Guest

AW: AS3 Inhalt über switch füllen

function SWF1(e:Event):void {
//con_mc.leer_mc.addChild(loader);
trace(con_mc);
trace(con_mc.leer_mc);
trace(e.target);
con_mc.leer_mc.addChild(e.target);
}
[/code]

beim Film testen wird der ani.swf nicht angezeigt und im Ausgabefenster nun ausgegeben:

[object MovieClip]
undefined
[object LoaderInfo]
TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at buttonAS_fla::MainTimeline/SWF1()

Hi,

fällt Dir etwas auf?
trace(con_mc); -> [object MovieClip]
trace(con_mc.leer_mc); -> undefined
trace(e.target); -> [object LoaderInfo]

Dein leer_mc existiert nicht. Vielleicht auch nur falsch geschrieben, z.b. "_mc" vergessen? Oder der "leer_mc" ist nicht auf Frame 1 von "con_mc" zu finden.

Zweitens: Mein Fehler. Schreib bitte anstatt
Code:
con_mc.leer_mc.addChild(e.target);

Code:
con_mc.leer_mc.addChild(e.target.loader);

ODER
Code:
con_mc.leer_mc.addChild(e.target.content);

Beides müsset funktionieren. Das erste added den Loader, das zweite added den Inhalt des Loaders.

MFG ad86
 

johanna52

Interessierte

AW: AS3 Inhalt über switch füllen

ja, da hab ich wohl jetzt noch mehr durcheinander verzapft.
Ich hatte den leeren Movieclip auf der Hauptbühne oben auf den Container gelegt und den Instanznamen leer_mc gegeben - auch richtig geschrieben.
Nun habe ich den Container per Doppelklick geöffnet und das leere Movieclip direkt hineingelegt und den Instanznamen leer_mc gegeben.

Der ani.swf wird nun über allen Seiten angezeigt und der Text der Seite 2 liegt unter dem ani.swf --> aber wir scheinen auf den richtigen Weg zu sein.



Code:
//neue Loader Instanz mit leerem Movieclip
var loader:Loader = new Loader();
//Laden externe Daten
loader.load(new URLRequest("ani.swf")); //Abfrage fertig geladen 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,SWF1);
//trace("zeile x");
//Erst wenn fertig geladen, dann per addChild dem Container hinzufügen 

function SWF1(e:Event):void { 
//con_mc.leer_mc.addChild(loader);
trace(con_mc);
trace(con_mc.leer_mc);
trace(e.target);
con_mc.leer_mc.addChild(e.target.loader);
//con_mc.leer_mc.addChild(e.target.content);
}
 
A

ad86

Guest

AW: AS3 Inhalt über switch füllen

Der ani.swf wird nun über allen Seiten angezeigt und der Text der Seite 2 liegt unter dem ani.swf --> aber wir scheinen auf den richtigen Weg zu sein.

Hi,

so ist es auch korrekt. ani.swf ist ein Child von con_mc.leer_mc. Und erst wenn Du ihn wieder löschst, verschwindet er. Das er unterhalb des Txt von Seite 2 ist, liegt daran, dass dein con_mc unterhalb des Textes liegt.

MFg ad86
 

johanna52

Interessierte

AW: AS3 Inhalt über switch füllen

danke für Deine geduldige Hilfe.

Der ani.swf sollte zwar nur auf die 1. Seite, aber ich denke, ich werde damit die switch-Geschichte für eine Navigation besser lassen und wieder wie vorher arbeiten. Das war einfacher und auch übersichtlicher. Das gilt besonders für eine umfangreiche Seite mit vielen Bildbezeichnungen.

Danke nochmal!
 
A

ad86

Guest

AW: AS3 Inhalt über switch füllen

Hi,

Wenn Du auf verschiedenen Seiten Daten lädst, könnte das funktionieren:

Code:
[COLOR="Red"]//Sollte in der allerersten Zeile stehen:
var loader:Loader;[/COLOR]

buttons_mc.addEventListener(MouseEvent.CLICK, onClick);
function onClick (e:MouseEvent):void {
	[COLOR="red"]//Entweder hier, oder sobald Du auf eine andere Seite wechselst
	if (loader){
		con_mc.leer_mc.removeChild(loader);
		loader=null;
	}[/COLOR]
	
	switch(e.target.name) {
		case "eins_btn":  
		con_mc.con_txt.text= "Seite 01"
		//neue Loader Instanz mit leerem Movieclip
		[COLOR="red"]loader= new Loader();[/COLOR]
		loader.load(new URLRequest("ani.swf")); 
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE,SWF1);
		break; 
	case "zwei_btn": 
		con_mc.con_txt.htmlText= "Seite 02<br>hier eine schöne Gartenblume<br><a href='http://www.xxxx.de'><img src='../img/blume.jpg'></a>und das Ganze ist verlinkt auf meine Homepage"
		break; 
	case "drei_btn": 
		con_mc.con_txt.text= "Seite 03"
		break;
	case "vier_btn": 
		con_mc.con_txt.text= "Seite 04"
		break;
	}
}

function SWF1(e:Event):void {
	//Loader ist ok, da es eine globale Variable ist
	con_mc.leer_mc.addChild(loader);
}

MFG ad86
 
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.640
Beiträge
1.538.505
Mitglieder
67.559
Neuestes Mitglied
mic4mac
Oben