mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 26.04.2024 01:13 Benutzername: Passwort: Auto-Login

Thema: Actionscript Bilderrotation vom 29.02.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Multimedia -> Actionscript Bilderrotation
Seite: 1, 2, 3  Weiter
Autor Nachricht
marcusm
Threadersteller

Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht: Männlich
Verfasst Fr 29.02.2008 17:48
Titel

Actionscript Bilderrotation

Antworten mit Zitat Zum Seitenanfang

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:
Code:
gotoAndPlay(2);



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
  View user's profile Private Nachricht senden
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst Sa 01.03.2008 12:30
Titel

Antworten mit Zitat Zum Seitenanfang

'ne .fla wäre hilfreich. Da hat keiner Lust, das nachzubauen und zu gucken.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
marcusm
Threadersteller

Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht: Männlich
Verfasst Sa 01.03.2008 15:56
Titel

Antworten mit Zitat Zum Seitenanfang

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....
  View user's profile Private Nachricht senden
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst Sa 01.03.2008 16:32
Titel

Antworten mit Zitat Zum Seitenanfang

.fla? Lächel
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
marcusm
Threadersteller

Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht: Männlich
Verfasst Sa 01.03.2008 16:36
Titel

Antworten mit Zitat Zum Seitenanfang

@ therapiekind

Schau doch mal bitte in meinen ersten Post, habe dort etwas weiter unten eine zip-Datei angehängt...

Gruß
marcusm
  View user's profile Private Nachricht senden
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst Sa 01.03.2008 17:21
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
marcusm
Threadersteller

Dabei seit: 06.05.2002
Ort: europa
Alter: 46
Geschlecht: Männlich
Verfasst Sa 01.03.2008 18:01
Titel

Antworten mit Zitat Zum Seitenanfang

@ 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....
  View user's profile Private Nachricht senden
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst Sa 01.03.2008 19:15
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Actionscript 2.0 für Scollpane
Flash Actionscript
Applescript & Actionscript
Ich will Actionscript lernen
Navigation per Actionscript
Maus - Actionscript
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3  Weiter
MGi Foren-Übersicht -> Multimedia


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.