Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
marcusm
Threadersteller
Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht:
|
Verfasst Fr 29.02.2008 17:48
Titel Actionscript Bilderrotation |
|
|
Hallo zusammen,
versuche seit einigen Stunden ein wenig Actionscript zu meinen Gunsten arbeiten zu lassen,
allerdings seither ohne nennenswerte Erfolge.
Ich möchte, 5 Bilder nebeneinander zufällig auswählen lassen und nach X Sekunden faden sich darüber
wieder 5 neue Bilder ein. Die jeweils verdeckten 5 Bilder werden dann wieder von der Bühne entfernt.
Die Bilder sind bereits in der Fla importiert und in Mcs abgelegt die "pic_1" - "pic_10" heißen. Dann habe
ich noch zwei MCs mit Namen "container_eins" und "container_zwei" angelegt, in diese werden jeweils
die 5 Bilder (MCs) geladen.
Das ganze Script funktioniert bis zu dem Punkt, wo der Film in Bild 2 zurück springt und dann der aktuelle
sichtbare "container_zwei" wieder vom dann neu erzeugten "container_eins" überdeckt werden sollte.
Ab hier funktionieren auch meine Alphafadings nicht mehr.
Auf der Bühne ist nichts platziert und die Zeitleiste besteht lediglich aus leeren Schlüsselbildern mit AS...
Frame 1: Code: | /// Positionen der Bilder
_global.positionen = new Array();
positionen[1] = [5, 5];
positionen[2] = [200, 5];
positionen[3] = [395, 5];
positionen[4] = [590, 5];
positionen[5] = [785, 5];
/// Maximale Anzahl der Bilder
_global.anzahl_bilder = 10;
trace("check"); |
Frame 2: Code: | trace("Start Animation");
_global.aktiv_images_eins = new Array();
_global.aktiv_images_zwei = new Array();
/// Funktion zum starten des ersten Containers
function start_animation_eins(){
/// enthält die neue Zahl
var newNumber: Number;
/// speichert ob das Array die Zahl schon enthält
var exist: Boolean;
/// maximale Anzahl Array-Elemente
var z: Number = 5;
/// Counter
var m: Number = 1;
while( aktiv_images_eins.length <= z ){
/// neue Zahl auslesen
newNumber = int (Random (anzahl_bilder));
/// exist auf false setzen für den neuen Durchlauf
exist = false;
/// das bisherige Array durchgehen und prüfen ob Wert schon vorhanden
for( var j: Number = 1; j <= 5; j++ ){
/// ist der Wert vorhanden exist auf wahr stellen und mit break diese Schleife abbrechen
if( newNumber == aktiv_images_eins[j] or newNumber == 0){
exist = true;
break;
}
}
/// ist exist === false neuen Wert speichern
if( exist === false ){
aktiv_images_eins[m] = newNumber;
m++;
}
}
/// lade Container auf die Bühne
_root.attachMovie("container_eins", "container_eins", _root.getNextHighestDepth(), {_x: 0, _y: 0, _alpha: 0});
/// lade Bilder mit Mcs in den Container
for(var i:Number = 1; i <=5; i++){
PosX = positionen[i][0];
PosY = positionen[i][1];
mc = "pic_" + aktiv_images_eins[i];
_root["container_eins"].attachMovie(mc, mc, _root["container_eins"].getNextHighestDepth(), {_x: PosX, _y: PosY});
}
}
/// Funktion zum Einblenden des ersten Containers
function fade_in_eins(){
if(int(_root["container_eins"]._alpha) <= 100){ _root["container_eins"]._alpha +=10; }
if(int(_root["container_eins"]._alpha) < 100){ setInterval(fade_in_eins, 80); }
}
/// Relevante Funktionen starten
start_animation_eins();
fade_in_eins(); |
Frame 15: Code: | /// löschen des zweiten Containers
if(_root["container_zwei"]){
for(var i:Number = 1; i <=5; i++){
mc = "pic_" + aktiv_images_zwei[i];
_root["container_zwei"].mc.removeMovieClip();
}
_root["container_zwei"].unloadMovie();
_global.aktiv_images_zwei = new Array();
}
else{ trace("Container 2 hat keinen Inhalt"); } |
Frame 40: Code: | /// Funktion zum starten des ersten Containers
function start_animation_zwei(){
/// enthält die neue Zahl
var newNumber: Number;
/// speichert ob das Array die Zahl schon enthält
var exist: Boolean;
/// maximale Anzahl Array-Elemente
var z: Number = 5;
/// Counter
var m: Number = 1;
while( aktiv_images_zwei.length <= z ){
/// neue Zahl auslesen
newNumber = int (Random (anzahl_bilder));
/// exist auf false setzen für den neuen Durchlauf
exist = false;
/// das bisherige Array durchgehen und prüfen ob Wert schon vorhanden
for( var j: Number = 1; j <= 5; j++ ){
/// ist der Wert vorhanden exist auf wahr stellen und mit break diese Schleife abbrechen
if( newNumber == aktiv_images_zwei[j] or newNumber == 0){
exist = true;
break;
}
}
/// ist exist === false neuen Wert speichern
if( exist === false ){
aktiv_images_zwei[m] = newNumber;
m++;
}
}
/// lade Container auf die Bühne
_root.attachMovie("container_zwei", "container_zwei", _root.getNextHighestDepth(), {_x: 0, _y: 0, _alpha: 0});
/// lade Bilder mit Mcs in den Container
for(var i:Number = 1; i <=5; i++){
PosX = positionen[i][0];
PosY = positionen[i][1];
mc = "pic_" + aktiv_images_zwei[i];
_root["container_zwei"].attachMovie(mc, mc, _root["container_zwei"].getNextHighestDepth(), {_x: PosX, _y: PosY});
}
}
/// Funktion zum Einblenden des ersten Containers
function fade_in_zwei(){
if(int(_root["container_zwei"]._alpha) <= 100){ _root["container_zwei"]._alpha +=10; }
if(int(_root["container_zwei"]._alpha) < 100){ setInterval(fade_in_zwei, 80); }
}
/// Relevante Funktionen starten
start_animation_zwei();
fade_in_zwei(); |
Frame 55: Code: | /// löschen des ersten Containers
if(_root["container_eins"]){
for(var i:Number = 1; i <=5; i++){
mc = "pic_" + aktiv_images_eins[i];
_root["container_eins"].mc.removeMovieClip();
}
_root["container_eins"].unloadMovie();
_global.aktiv_images_eins = new Array();
}
else{ trace("Container 1 hat keinen Inhalt"); } |
Frame 80:
Ich bin jetzt mit meinen Ideen am Ende, jemand eine Idee?
Danke
Edit: Die gezippte Fla findet Ihr hier
Was ich auch nicht verstehe ist, wenn ich in dieser Zeile
Code: | _root["container_eins"].unloadMovie(); |
das unloadMovie gegen ein removeMovieClip tausche und dann in Flash den Film teste, dann stürzt mir
jedes Mal das gesamte Programm ab....
Zuletzt bearbeitet von marcusm am Sa 01.03.2008 15:51, insgesamt 1-mal bearbeitet
|
|
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst Sa 01.03.2008 12:30
Titel
|
|
|
'ne .fla wäre hilfreich. Da hat keiner Lust, das nachzubauen und zu gucken.
|
|
|
|
|
Anzeige
|
|
|
marcusm
Threadersteller
Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht:
|
Verfasst Sa 01.03.2008 15:56
Titel
|
|
|
Habe jetzt mal versucht nicht die container_eins und container_zwei aus der Bibliothek zu instanzieren,
sondern via createEmptyMovieClip diese neu zu erzeugen, aber sobald ich diese MovieClips wieder von
der Bühne löschen möchte stürzt Flash wieder ab....
Kann es irgendwo an der meiner Schreibweise liegen, mit der ich die Clips erzeuge bzw. versuche anzusprechen?
Habe zwar etlich Schreibweisen versucht, aber immer mit gleichem Ergebnis....
|
|
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst Sa 01.03.2008 16:32
Titel
|
|
|
.fla?
|
|
|
|
|
marcusm
Threadersteller
Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht:
|
Verfasst Sa 01.03.2008 16:36
Titel
|
|
|
@ therapiekind
Schau doch mal bitte in meinen ersten Post, habe dort etwas weiter unten eine zip-Datei angehängt...
Gruß
marcusm
|
|
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst Sa 01.03.2008 17:21
Titel
|
|
|
Puh ... schwer sich da reinzudenken. Ohne dich kränken zu wollen: Der Code und allgemein wie du die ganze Sache angehst ist nicht gerade praktisch. Ziemlich anfällig für Fehler, wie du merkst.
Beim Drüberschauen ist mir aufgefallen, dass das hier nicht funktioniert:
Code: | /// löschen des zweiten Containers
if(_root["container_zwei"]){
for(var i:Number = 1; i <=5; i++){
mc = "pic_" + aktiv_images_zwei[i];
// Das ist von mir
trace(_root["container_zwei"][mc]);
_root["container_zwei"].mc.removeMovieClip();
}
_root["container_zwei"].unloadMovie();
_global.aktiv_images_zwei = new Array();
}
else{ trace("Container 2 hat keinen Inhalt"); } |
Guck mal in der for-Schleife, das was das trace-Statement ausgibt. Nix. Wenn du versuchst, Clips über Strings anzusprechen, solltest du außerdem darauf achten, die "eckige Klammern"-Schreibweise zu verwenden. Bei deinem removeMovieClip versucht es einfach nur, einen Clip namens "mc" zu löschen.
Ich glaube, du solltest das alles noch mal neu versuchen. Sorry.
Wenn du Hilfe bei der Umsetzung oder einfach nur Denkstöße brauchst: Meld you.
[edit]
Mir ist noch aufgefallen, dass du einige veraltete Funtionen (z.B. random) benutzt und allgemein ActionScript 1.0 und 2.0 vermischst. Ist zwar ok, aber kann dich später mal zurückverfolgen.
[/edit]
Zuletzt bearbeitet von therapiekind am Sa 01.03.2008 17:24, insgesamt 2-mal bearbeitet
|
|
|
|
|
marcusm
Threadersteller
Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht:
|
Verfasst Sa 01.03.2008 18:01
Titel
|
|
|
@ therapiekind
Dank Dir erstmal für Deine Mühe! Das ist mein erster Versuch sowas komplett mit As zu lösen, dass heißt eigentlich ist das der zweite Versuch, vorher hatte ich das mit 2 Frames und der Funktion setInterval komplett zu lösen versucht.
Das ich das in der Fla so aufgebaut habe wie Du gesehen hast, ist das Resultat aus dem ersten mißglückten Versuch.
Um auf Dein Beispiel zurück zukommen, wäre das Code: | _root["container_zwei"].mc.removeMovieClip(); | mit dieser Schreibweise Code: | _root["container_zwei"]["mc"].removeMovieClip(); | richtig???
Ich bin aber auch für jeden neuen Ansatz offen! Komme eigentlich aus dem PHP-Bereich und hänge immer wieder im Aufbau in den "üblichen PHP-Mustern" fest, um dann oft feststellen zu müssen, dass es bestimmte Funktionen für bestimmte Aufgaben im As nicht gibt....
|
|
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst Sa 01.03.2008 19:15
Titel
|
|
|
Code: | _root["container_zwei"][mc].removeMovieClip(); |
So wäre es richtig.
Ich muss mich jetzt leider erst einmal betrinken. Ich schreib morgen noch mal was.
|
|
|
|
|
|
|
|
Ähnliche Themen |
Actionscript 2.0 für Scollpane
Flash Actionscript
Applescript & Actionscript
Ich will Actionscript lernen
Navigation per Actionscript
Maus - Actionscript
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|