Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-12-2006, 21:03   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2006
Beiträge: 3
Ändern von Objekten in eingebundenen MC's

Hallo,

ich versuche hier den Inhalt eines Textfeldes zu ändern. Das Textfeld sitzt allerdings in einem anderen swf dass ich per loadMovie() einbinde. Das ändern des Inhaltes klappt leider nicht. Ich habe mal ein Beispiel erstellt um das Problem anschaulich zu machen:

Das Beispiel besteht aus 2 Dateien:
-main.swf
-include.swf

In jeder Datei werden 2 Textfelder erstellt deren Inhalt geändert werden soll. Und zwar soll jeweils ein Textfeld vom anderen MC aus geändert werden und ein Textfeld vom MC aus geändert werden in der es sitzt. Also:

textfeld1 sitzt in main.swf und soll von main.swf geändert werden.
textfeld2 sitzt in main.swf und soll von include.swf geändert werden.
textfeld3 sitzt in include.swf und soll von include.swf geändert werden.
textfeld4 sitzt in include.swf und soll von main.swf geändert werden.

Das ändern der Felder 1 bis 3 funktioniert. Leider nicht bei Feld 4, um dass es mir ja geht.

Der AS-Code:

main.swf
Code:
/*
textfeld1
soll von diesem MC aus geändert werden
*/
createTextField("textfeld1", 1, 0, 0, 400, 18);
with (textfeld1) {
	type = "dynamic";
	border=true;
	text="textfeld1 in main.swf";
}

/*
textfeld1 wird geändert
funktioniert
*/
_root.textfeld1.text += " wurde von main.swf aus geändert ! ! !";

/*
textfeld2
soll von einem anderen MC geändert werden
*/
createTextField("textfeld2", 2, 0, 20, 400, 18);
with (textfeld2) {
	type = "dynamic";
	border=true;
	text="textfeld2 in main.swf";
}

/*
movieclip wird eingebunden
*/
_root.createEmptyMovieClip("include",3);
_root.include.loadMovie("include.swf");

/*
textfeld4 wird geändert
funktioniert nicht
*/
_root.include.textfeld4.text += " wurde von main.swf aus geändert ! ! !";

stop();
include.swf
Code:
/*
textfeld3 soll von diesem MC aus geändert werden
*/
createTextField("textfeld3", 1, 0, 40, 400, 18);
with (textfeld3) {
	type = "dynamic";
	border=true;
	text="textfeld3 in include.swf";
}

/*
textfeld3 wird geändert
funktioniert
*/
_root.include.textfeld3.text += " wurde von include.swf aus geändert ! ! !";

/*
textfeld4 soll von einem anderen MC geändert werden
*/
createTextField("textfeld4", 2, 0, 60, 400, 18);
with (textfeld4) {
	type = "dynamic";
	border=true;
	text="textfeld4 in include.swf";
}

/*
textfeld2 wird geändert
funktioniert
*/
_root.textfeld2.text += " wurde von include.swf aus geändert ! ! !";
Ich habe jetzt 2 Theorien zu dem Problem:

1) Man kann nicht auf Objekte in externen Dateien zugreifen. Glaube ich allerdings nicht.

2) Das Objekt textfeld4 bzw. der ganze MC include.swf ist zu dem Zeitpunkt an dem ich den Wert ändern möchte noch nicht geladen. Bin mir ziemlich sicher dass es so ist. Bloss weis ich nicht wie ich das Problem lösen soll.
Ich habe versucht eine Schleife durchlaufen zu lassen bis das swf geladen ist.
Code:
while (_root.include._framesloaded < _root.include._totalframes) {}
_root.include.textfeld4.text += " wurde von main.swf aus geändert ! ! !";
Doch das klappt nicht da sowohl _framesloaded als auch _totalframes den Wert 1 besitzen.

Kann mir vlt. jemand erläutern wo das Problem sitzt oder wie ich das Problem löse?

Eine gutes Actionscript-Tutorial o.Ä. wäre auch sehr willkommen. Allerdings habe ich noch keines gefunden mit dem ich was anfangen kann, denn die beziehen sich alle auf MM Flash-Applikationen. Ich erstelle meine SWF's allerdings per Hand mit PHP/Ming, also pures AS.

Vielen Dank im Voraus für jeden Tip!

meto
meto ist offline   Mit Zitat antworten
Alt 27-12-2006, 23:10   #2 (permalink)
FlashLove@FirstSight
 
Benutzerbild von FLASHStyler
 
Registriert seit: Feb 2003
Beiträge: 2.460
Wenn du einen MovieClip hast in der Main.swf und da Movies reinlädst und den AS-Code im MainMovie hast, dann sprichste sie wie folgt an:
ActionScript:
  1. //dieser Code liegt im Main Movie
  2. meinMovieWoIchExterneMoviesReinlade.meinInhaltAusDemExternenMovie.Eingenschaft   = Wert;
Wenn du aus dem externen Movie Inhalte ansprechen willst, also wen der AS-Code ebenfalls im externen Movie liegt, dann musste das auch so wie oben beschrieben ansprechen.
ActionScript:
  1. //dieser Code liegt im Externen Movie
  2. meinMovieWoIchExterneMoviesReinlade.meinInhaltAusDemExternenMovie.Eingenschaft   = Wert;

Das ist ledeglich ein Pfad Problem.


Wenn du mit einem Code aus dem externen Movie Inhalte aus dem selben Movie ansprechen willst... z.B.
ActionScript:
  1. _root.object.eigenschaft = wert;

dann denkt Flash, dass du das _root aus dem main movie meinst und nicht wie du es vorhast aus dem externen movie....

Ich hoffe man kann verstehen was ich meine ...
__________________
www.johannes-erhardt.com | blog | xing me baby
FLASHStyler ist offline   Mit Zitat antworten
Alt 28-12-2006, 00:36   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2006
Beiträge: 3
Hi FLASHStyler,

danke für Deine Antwort. Leider bringt mich das aber nicht weiter.

Das mit den Pfaden, denke ich, habe ich verstanden. In dem Beispiel bin ich über _root gegangen um zu sehen ob der Umweg auch wirklich klappt. Klappt. Ich hab an der Stelle also auch wirklich den _root vom Hauptfilm gemeint.

Inzwischen bin ich ein kleines Stück weiter und bin mir nun ziemlich sicher dass das Problem nichts mit 1) zu tun hat. Ich habe die Aktion (Ändern des Textfeldes) auf einen Button (onRelease) gelegt. Klappt einwandfrei. Müsste also ein Timingproblem sein. Hat jemand eine Idee wie ich das hinbekommen kann?
meto ist offline   Mit Zitat antworten
Alt 28-12-2006, 01:13   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
da hast du dir eine etwas ungünstige situation geschaffen.
include muss ja erst geladen und das textfeld angelegt werden, bevor du es benutzen kannst - das hast du richtig erkannt: ein zeitproblem.
üblicher weisse legt man dafür ein onEnterFrame an und testet mit getBytesLoaded() und getBytesTotal() ob das objekt geladen wurde. dazu ist es sinnvoll ein mc in ein mc zu erzeugen. das äussere für das onEnterFrame, das innere zum laden des swf's - das bis dahin nicht ansprechbar ist.
eine bessere lösung gibt es ab flash 7 mit loadClip.

hier eine lösung mit setInterval, die auch mit MX geht:
Code:
_root.createEmptyMovieClip("include", 3);
_root.include.loadMovie("include.swf");
si = setInterval(function () {
  if (_root.include.textfeld4 != undefined) {
    _root.include.textfeld4.text += " wurde von main.swf aus geändert ! ! !";
    clearInterval(si);
  }
}, 100);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (28-12-2006 um 01:15 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-12-2006, 17:13   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2006
Beiträge: 3
Dank Dir hgseib!

Mit setInterval funktioniert es. Ich hab's noch ein klein wenig anders gemacht. Im Interval prüfe ich eine globale Variable die erst in include.swf gesetzt wird. Das Setzen der Variable hat dann die Wirkung eines Funktionsaufrufs. So hab ich bisserl mehr Kontrolle.

Zitat:
da hast du dir eine etwas ungünstige situation geschaffen.
Ging leider nicht anders. Oder zumindest hab ich keine andere Lösung gefunden. Ist ja erst mein zweiter Tag mit Actionscript. Google hat mir zu meinem eigentlichen Problem nichts brauchbares geliefert. Das mit dem Textfeld war nur ein vereinfachtes Beispiel. Ich arbeite ja mit purem AS, wollte aber die UIComponente Scrollpane nutzen. Das einfachste, dachte ich, wäre die Scrollpane in ein extra swf auszulagern und dann den Content im Hauptfilm zu setzen. Klappt jetzt dank des Intervals auch prima.

Dank Dir nochmals!

meto
meto ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele