Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-04-2007, 02:18   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 33
Question attachMovie - Zugriff auf Funktionen/Variablen im angehängten MC aus der Bibliothek

Moin,

die Funktionsweise des folgenden Codes erschließt sich mir einfach nicht:

PHP-Code:
var mcTest:MovieClip this.createEmptyMovieClip("test"0);

var 
mcClip:MovieClip mcTest.attachMovie("theClip""theClip"0);

trace("mcClip.nValue = " mcClip.nValue);

mcClip.traceMessage();

mcTest.beginFill(0x000000);
mcTest.lineTo(0100);
mcTest.lineTo(100100);
mcTest.lineTo(1000);
mcTest.lineTo(00);
mcTest.endFill();

mcTest._x 100;
mcTest._y 100;

mcTest.onRelease = function() {
    
trace("button hit");
    
this.theClip.traceMessage();

Der in der Bilbiothek liegende Movieclip enthält folgenden Code:

PHP-Code:
stop();

var 
nValue:Number 42;

function 
traceMessage() {
    
trace("traceMessage called");    

Warum kann ich nicht direkt nach dem Aufruf von attachMovie auf Funktionen und/oder Variablen in "theClip" zugreifen? Sondern erst, wenn ich via Mouseclick die onRelease-Funktion aufrufe?

Danke für die Hilfe

Grüße
EmsOne
emsone ist offline   Mit Zitat antworten
Alt 24-04-2007, 02:32   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
aktuell wird ein mc angelegt
alles was im mc drinn ist muss erst noch angelegt werden; vorher existiert es noch nicht.

das anlegen erfolgt im nächsten frame (im nächsten zyklus), dann werden auch die scripte im mc ausgeführt.

http://www.seibsprogrammladen.de/fra...ispiele/flash6
-> Grundwissen
... wer beginnt wann: Ausführungsreihenfolge von Scripten
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-04-2007 um 02:33 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 24-04-2007, 03:26   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 33
moin,

danke für den hinweis, diese zusammenhänge waren mir so noch nicht bewusst.

wenn ich das richtig verstehe, kann ich erst in einer onLoad funktion auf die AS-Inhalte eines Objekts aus der Bibliothek zugreifen, denn der code innerhalb dieser onLoad funktion wird erst ausgeführt, wenn das Objekt 'vollständig' geladen wurde. ich würde das gerne gleich mal ausprobieren, aber ich weiß leider nicht, wie ich eine onLoad funktion für ein objekt (in meinem bsp: theClip) definieren soll, dass nur in meiner bibliothek existiert, aber noch nicht auf der bühne ist (klar, genau den vorgang gilt es ja zu überwachen).

so gehts auf jeden fall nicht:

PHP-Code:
var mcTest:MovieClip this.createEmptyMovieClip("test"0);

var 
mcClip:MovieClip;

mcClip.onLoad = function() {
    
trace("onLoad");
    
this.theClip.traceMessage();
}

mcClip =  mcTest.attachMovie("theClip""theClip"0);

trace("mcClip.nValue = " mcClip.nValue);

mcClip.traceMessage();

mcTest.beginFill(0x000000);
mcTest.lineTo(0100);
mcTest.lineTo(100100);
mcTest.lineTo(1000);
mcTest.lineTo(00);
mcTest.endFill();

mcTest._x 100;
mcTest._y 100;

mcTest.onRelease = function() {
    
trace("button hit");
    
this.theClip.traceMessage();
    
trace("mcClip.nValue = " mcClip.nValue);
}

function 
testAccess() {
    
trace("testAccess");
    
theClip.traceMessage();
    
trace("mcClip.nValue = " mcClip.nValue);

PHP-Code:
var nValue:Number 42;

function 
traceMessage() {
    
trace("traceMessage called");    
}

this.onLoad = function() {
    
_root.testAccess();
    
trace("theClip :: onLoad");

grüße
emsone
emsone ist offline   Mit Zitat antworten
Alt 24-04-2007, 04:27   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
um sowas nicht jedem einzeln erklären zu müssen habe ich eine demo-fla gemacht - siehe link in #2
das zip dort bitte laden und genau ansehen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-04-2007 um 04:29 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 24-04-2007, 21:02   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 33
das habe ich bereits getan, aber in deinem beispiel (wer_beginnt_wann.fla) existieren die objekte, auf denen die onLoad funktion definiert wird, bereits auf der bühne. in meinem fall existieren sie nur in der bibliothek. insofern lässt sich eine lösung für mein problem nicht vollständig aus deinem demo-fla ablesen.

zudem erschließt sich mir die notwendigkeit einer onClipEvent(load) ereignisprozedur, angehängt an die instanz des zu ladenden objektes, ebenfalls nicht aus dem demo-fla. die flash-hilfe sagt ebenso nichts dazu.

ich hab ja echt verständnis dafür, dass man keinen bock hat, alles immer nochmal zu erklären, aber es wäre super, wenn du mir etwas auf die sprünge helfen könntest.

grüße
emsone
emsone ist offline   Mit Zitat antworten
Alt 24-04-2007, 23:16   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
alles muss immer "fix und fertig" sein und 10.000% überein stimmen - man kann auch mal selbst was probieren.


schau mal in testB_mc rein: da steht z.b.

#initclip
// dieser programmteil initialisiert dieses symbol
trace("initclip in testB_mc");
#endinitclip
trace('script in der zeitleiste von: '+this);

hast du dir das angesehen? das commando in der flash-hilfe nachgelesen?

-----------------
onClipEvent(load)
veraltete syntax - wird dennoch in der flash-hilfe erklärt. das wird aufgerufen, wenn das objekt zum ersten erscheint.
bei objekten, die sich auf dem ersten frame befinden geht es nicht, weil: die erscheinen nicht, die sind schon da.

neuere syntax:
this.testA.onLoad = fOnLoad;

bzw.
unnötig, weil es das selbe ist wie alles, was auf der zeitleiste steht. das wird auch ausgeführt, wenn das objekt zum ersten mal erscheint.

und es ist egal, ob das "erscheint", weil es extern geladen wurde, oder aus der bib, oder weil in eine neue zeitspur gesprungen eine instanz vorliegt.

------------------
unschöne lösung, aber vielleicht kommst du damit klar?
Code:
mcClip =  mcTest.attachMovie("theClip", "theClip", 0);
mcClip.onEnterFrame=function(){
 if (this.xxx!=undefined)
 { // jetzt ist es vorhanden
   delete this.onEnterFrame;
 }
}
------------------
und/oder
das mc kann selbst auslösen, wann es initiiert wurde. z.b. im mc:
_level0.fIchBinDa(this);



wenn die ursache bekannt ist, dann sollte man doch selbst wege finden können, das problem zu lösen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-04-2007 um 23:21 Uhr)
hgseib 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 14:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele