| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #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(); 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 ! ! !"; 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 ! ! !"; 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 |
| | |
| | #2 (permalink) |
| FlashLove@FirstSight 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:
ActionScript:
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:
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 ...
|
| | |
| | #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? |
| | |
| | #4 (permalink) |
| Techniker 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) |
| | |
| | #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:
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 | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |