AS bei Bildbezeichnung "stop"
PHP-Code:Mouse.show();
//for (i=1; i<=cAnzOrange; i++) _root["orange_getroffen" + i].unloadMovie();
// oder
for (i=1; i<=cAnzOrange; i++) _root["orange_getroffen" + i].removeMovieClip();
stop();
Guten Abend alle zusammen,
bis jetzt konnte ich geladene Movieclips, die ich mit attachMovie() oder duplicateMovie() aufgerufen habe, in nächsten Frame unproblematisch mit removeMovieClip() wieder loswerden.
Ich habe im Netz ein Skript gefunden, das ich mir für meine Bedürfnisse anpassen konnte.
In diesem Fall lade ich einen Movieclip aus der Bibliothek ( also nicht auf der Bühne platziert ) über eine Funktion. Im ersten Bild habe ich einen leeren MC platziert, der die Funktion über onClipEvent (load)... aufruft.
Das funktioniert auch wunderbar.
Nach Ablauf des Timers springe ich in den zweiten Frame und hätte da wieder gerne eine leere Bühne. Die aufgerufenen Instanzen werde ich aber hier nicht mehr los. Innerhalb der Funktion werden sie zwar mit attachMovie aufgerufen, lassen sich aber nicht mit removeMovieClip wieder entfernen.
Wahrscheinlich muss ich die aufgerufene Funktion wieder stoppen, bin mir da aber nicht schlüssig, wie ich das machen soll.
Eine Testdatei habe ich mal angehangen ( in Flash 8 konvertiert ).
Lg Anja
Geändert von Angie3007 (11.10.2007 um 23:46 Uhr)
AS bei Bildbezeichnung "stop"
PHP-Code:Mouse.show();
//for (i=1; i<=cAnzOrange; i++) _root["orange_getroffen" + i].unloadMovie();
// oder
for (i=1; i<=cAnzOrange; i++) _root["orange_getroffen" + i].removeMovieClip();
stop();
![]()
Ich schließe Dich gleich in mein Nachtgebet mit ein !
Dir helfe ich nicht mehr!
Wer weiß was sonst noch kommt.![]()
Hallo Mark,
Habe mir das mit dem Gebet dann doch noch mal überlegt. Du sollst ja keine Angst vor mir bekommen.![]()
Was hat es für einen Grund, daß ich das Fadenkreuz nicht mehr sehen kann, wenn es die Objekte berührt oder genau auf den Objekten liegt?
Ich habe die Fadenkreuz-Ebene mal über die Shooter-Ebene geschoben, das hat aber nichts gebracht.
Das hat sicherlich doch irgendwas mit _root zu tun?
Lg Anja
Das hat was mit der Stufe zu tun, die Objekte werden ja via AS platziert.
Änder das AS auf dem Fadenkreuz mal wie folgt ab.
PHP-Code:onClipEvent (enterFrame) {
this.swapDepths(1000); // Schiebt es nach oben.
this._x = _root._xmouse;
this._y = _root._ymouse;
}
swapDepths() habe ich jetzt natürlich mal nachgeschlagen und glaube, das habe ich auch kapiert. Ich setze das Fadenkreuz damit einfach auf eine höhere Ebene. Das funktioniert anscheinend auch bei statischen Filmsequenzen, die man mit removeMovieClip() löschen möchte.
Wenn ich jetzt noch zwei andere Objekte zusätzlich auf die Bühne bringen möchte um der ganzen Sache mehr Herausforderung zu geben, muss ich dann für die beiden weiteren zwei komplett neue Funktionen definieren oder kann ich sie auch mit der Funktion fInit ansprechen?
Die beiden neuen Objekte sind vom Aufbau identisch mit dem vorhandenen, sie unterscheiden sich später lediglich in der Anzahl der Punkte, die sie bringen.
Ich habe sie in meinem jugendlichen Leichtsinn mal mit in die while-schleife reingepackt, was beim Testen natürlich zu einem Totalabsturz führte.
Jetzt dachte ich schon mal, sie ließen sich mit einem Operator verknüfen, finde da aber keinen, der das erreicht, was ich will.
Ich habe es bislang nur soweit geschafft, das die Zitronen angezeigt werden, die auch als letztes angesprochen werden. Die gewünschte Anzahl der einzelnen Objekte, die in der Schleife auftauchen, habe ich natürlich vorher definiert, also z.B.Code:function fInit() { var v; var vName; var vObj; v = 1; while (cAnzOrange>=v, cAnzLimette>=v, cAnzZitrone>=v) { vName = "orange_getroffen"+v; vName = "limette_getroffen"+v; vName = "zitrone_getroffen"+v; _root.attachMovie("orange_getroffen",vName,v); _root.attachMovie("limette_getroffen",vName,v); _root.attachMovie("zitrone_getroffen",vName,v); vObj = _root[vName]; vObj._x = vRahmenL+random(vRahmenB); vObj._y = vRahmenT+random(vRahmenH); vObj.orange_getroffen.splash1._alpha = 0; vObj.limette_getroffen.splash2._alpha = 0; vObj.zitrone_getroffen.splash3._alpha = 0; v++; } }
var cAnzZitrone = 5
Anja
Niedliches Konstrukt![]()
So, ich habe da mal ein wenig aufgeräumt und mal den ganzen Code auf die Zeitleiste gelegt, so muss man da nicht immer auf den Objekten suchen.
Die Zitronen und Äpfel habe ich einfach mal mit Kreisen angedeutet ...
Niedliches Konstrukt, also ehrlich...![]()
Dabei war ich schon so stolz, es sah auf jeden Fall hochprofessionell aus.
Es ist echt zum Verzweifeln, Gott sei Dank muss ich mit ActionScript kein Geld verdienen, dann wäre ich schon verhungert.
Ich hatte mal ansatzweise mit der Programmiersprache Java zu tun, da hatte ich mit Funktionen, Methoden und Anweisungen auch schon meine Probleme.
Aber das von Dir ist schon super, das bekomme ich in meinen kompletten Film auf jeden Fall reingestrickt.
Danke!
Anja
http://strickforum.de
Wir wollen hier doch programmieren.
Bei weiteren Fragen, weißt Du ja wo es Hilfe gibt. Zumindest wenn wir uns auf die Programmierung festlegen.
Warum funktioniert
innerhalb des eigentlichen Filmes nicht ?Code:this.onLoad = function() { _root.fInit(cAnzOrange, "orange_getroffen"); _root.fInit(cAnzLimette, "limette_getroffen"); _root.fInit(cAnzZitrone, "zitrone_getroffen"); }
Ich nehme stark an, daß es an dem Funktionsaufruf liegt. Irgendie muss es da noch einen Unterschied geben ob der Film direkt startet oder eingebunden ist.
Wenn ich in der Testversion ein Bild davor setze und da einen Timer von 15 Sekunden reinsetze, der nach Ablauf dieser 15 Sekunden nach Bild 2 springt, passiert --- nichts...![]()
Hallo Anja,
onLoad zickt manchmal rum, erstelle einen normalen functionsaufruf
function init(){
deine Anweisung
}
damit deine Anweisung nur einmal ausgeführt wird
if(aufruf == undefined)
{
init()
aufruf = false;
}
Ist zwar nicht die feine englische Art, aber hilfreich![]()
Gruß
Wanderratte
Gebildet ist,
wer weiß,
wo er findet,
was er nicht weiß.
4bugs
Home
Amazon Wunschzettel
Hm, verträgt den "onLoad" einen Framewechsel allgemein schlecht (zickig, wie Ralf so schön sagte) oder hat das einen bestimmten Grund?
Anscheinend funktioniert es ja wunderbar, wenn es direkt im ersten Bild aufgerufen wird. Aber das heißt doch dann bestimmt nicht, daß man "onLoad" nur im ersten Bild benutzen kann.
Oder ist es einfach überfordert, da es eine Funktion dreifach aufrufen muss? Kann aber ja auch nicht sein, sonst würde es auch im ersten Bild nicht klappen.
Erst dachte ich, daß es mit dem Timer ein Problem hat, aber ich habe testweise im ersten Bild mal einen Schalter gesetzt, der auf das zweite Bild verweist, das Ergebnis war dasselbe. Keinerlei Reaktion.
Der zweite Versuch war, über einen leeren MC über "onClipEvent (load) {...} die Funktion aufzurufen
Dann kam die Fehlermeldung, daß der Flash-Player durch ein Skript verlangsamt wird. Also Totalausfall.
Dabei finde ich "onLoad" eine wirklich elegante Lösung, wenn sie funkionieren würde.
Gruß Anja
*** Wenn die Sonne der Erkenntnis niedrig steht, werfen auch Zwerge lange Schatten ***
Das ist eigentlich ein ganz normales Verhalten.
die onLoad Prozedur wird ausgeführt, sobald ein Objekt in den Speicher geladen wird.
Da der Film nun schon vor dem erreichen des 2 Key im Speicher ist, wird diese Prozedur auch nicht mehr ausgeführt.
Aber das onLoad brauchst Du eigentlich auch nicht. Wichtig ist halt, dass der Aufruf der function er nach ihrere Deklaration passiert. Also am Besten am Ende des Codes.
Um das zu testen, kannst Du ja mal diese beiden Codes probieren.
undPHP-Code:this.onLoad = function(){
ausgabe();
}
ausgabe = function() {
trace("ich bin geladen");
}
Du wirst sehen, im zweiten Code wird nichts ausgegeben, da zum Zeitpunkt der function diese noch garnicht geladen ist.PHP-Code:ausgabe();
ausgabe = function() {
trace("ich bin geladen");
}
Schreibe den Funktionsaufruf nach der function und es geht.
So kannst Du es nun auch bei Dir anwenden.
Die Deklarationen der functions können ja ruhig schon im ersten Key stehen. Beim erreichen des 2. Keys rufst Du sie dann einfach normal auf.
onLoad ist auch in Verbindung mit großen Daten nicht ohne. Hier kann es dazu kommen, das ein Ereignis in einem MC gestartet werden soll, dieses MC aber noch nicht voll geladen ist und daher passiert die gewünschte Aktion nicht.
Ich bin echt ein Trottel, da zerbreche ich mir tagelang den Kopf über onLoad, und im Endeffekt muss ich es einfach nur weglassen.
Eins ist sicher, ich werde mich mal intensiver mit dem Gebrauch von onLoad beschäftigen, um die Vor- und Nachteile zu erkennen. Denn so auf Anhieb fällt mir kein direkter Vorteil an, obwohl es da mit Sicherheit welche gibt, wenn vielleicht noch nicht für meine Ansprüche.
Wieder mal viel gelernt und ich danke auch zwei erneut herzlich für Eure Geduld.
Gruß Anja
*** Wenn die Sonne der Erkenntnis niedrig steht, werfen auch Zwerge lange Schatten ***
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)