In Vorschau-Fenstern oder MP3-Playern sieht/hört man zufällig abgespielte MovieClips. Dieses Howto erklärt euch, wie ihr eine zufällige Wiedergabe in Actionscript 3 realisiert. Dabei werden verschiedene Varianten erklärt mit unterschiedlichen Ansätzen. Folgende MovieClip-Klassen(mit Animation) sind vorhanden:
Zunächst packen wir die Namen der Klassen in ein Array hinein:
var myArray:Array = ["gelb_mc","rot_mc","gruen_mc","blau_mc"];
Dieses Array ist der Dreh- und Angelpunkt der zufälligen Vorschau und definiert die wiederzugebenden MovieClips. Man sollte unbedingt darauf achten, dass die MovieClips ungefähr die gleiche Größe haben, da sonst Verzerrungen entstehen könnten!
Nun definieren wir die Rahmenbedingungen der Vorschau. Dazu gehören zum Beispiel:
// Wiederholung am Ende var repeat:Boolean = true; // Position var xKoord:int = 45; var yKoord:int = 45; // Dimension var width:int = 100; var height:int = 100;
Dieser Part ist etwas kompliziert. Als Erstes wird das Array zufällig sortiert. Hierzu wird eine eigene Methode namens „getRandomPos“ und die Methode „sort“ des Arrays verwendet.
// Zufällig sortieren
myArray.sort(getRandomPos);
function getRandomPos(e:Object, e1:Object):int
{
return Math.floor(Math.random() * myArray.length - 1);
}
Das Ergebnis ist das gleiche Array mit einer zufälligen Sortierung. Nun werden dynamisch die einzelnen Objekte erzeugt, ausgerichtet, skaliert und angezeigt:
function showArray():void
{
if(count < myArray.length){
//Objekt erzeugen
var myClass:Class = getDefinitionByName(myArray[count]) as Class;
var myMc:MovieClip = new myClass() as MovieClip;
//Objekt ausrichten & skalieren
myMc.x = xKoord;
myMc.y = yKoord;
myMc.width = myWidth;
myMc.height = myHeight;
// Objekt anzeigen
addChild(myMc);
// EventListener adden
myMc.addEventListener(Event.ENTER_FRAME, endeMc);
}else{
// Zurücksetzen falls erwünscht und erneut abspielen
if(repeat){
count = 0;
showArray();
}
}
}
Zusätzlich wird ein Eventlistener erzeugt, der am Ende des MovieClips sich selbst und den MovieClip entfernt, den Counter hochzählt und die Methode neuaufruft.
function endeMc(e:Event):void
{
// Wenn Mc zu ende -->Eventlistener und Mc löschen
// Funktion neustarten
if(e.currentTarget.currentFrame >= e.currentTarget.totalFrames){
e.currentTarget.removeEventListener(Event.ENTER_FRAME, endeMc);
removeChild((e.currentTarget) as MovieClip);
count++;
showArray();
}
}
var myArray:Array = ["gelb_mc","rot_mc","gruen_mc","blau_mc"];
// Wiederholung am Ende
var repeat:Boolean = true;
// Position
var xKoord:int = 45;
var yKoord:int = 45;
// Dimension
var myWidth:int = 100;
var myHeight:int = 100;
// Zufällig sortieren
myArray.sort(getRandomPos);
// Counter Variable
var count:int = 0;
//starten
showArray();
function endeMc(e:Event):void
{
// Wenn Mc zu ende -->Eventlistener und Mc löschen
// Funktion neustarten
if(e.currentTarget.currentFrame >= e.currentTarget.totalFrames){
e.currentTarget.removeEventListener(Event.ENTER_FRAME, endeMc);
removeChild((e.currentTarget) as MovieClip);
count++;
showArray();
}
}
function showArray():void
{
if(count < myArray.length){
//Objekt erzeugen
var myClass:Class = getDefinitionByName(myArray[count]) as Class;
var myMc:MovieClip = new myClass() as MovieClip;
//Objekt ausrichten & skalieren
myMc.x = xKoord;
myMc.y = yKoord;
myMc.width = myWidth;
myMc.height = myHeight;
// Objekt anzeigen
addChild(myMc);
// EventListener adden
myMc.addEventListener(Event.ENTER_FRAME, endeMc);
}else{
// Zurücksetzen falls erwünscht und erneut abspielen
if(repeat){
count = 0;
showArray();
}
}
}
function getRandomPos(e:Object, e1:Object):int
{
return Math.floor(Math.random() * myArray.length - 1);
}
Kommentar verfassen