Erklärung Gesucht: Movieclip generierung per Actionscript

Danielku15

Erfahrenes Mitglied
Hallo Leute.
Ich google mir gerade die Finger wund. Vielleicht liegts auch daran dass ich nicht die richtigen Suchbegriffe habe also nicht böse sein wenn ihr auf anhieb viel findet.

Ich habe folgendes Projekt vor. Ich lasse mir per PHP aus meiner Bildergallerie Bilder auslesen. Bisher habe ich mich ein bisschen in Flash eingearbeitet, jedoch nur in Dinge die von Hand gemacht und von Actionscript "manipuliert" worden sind. Leider habe ich mich noch nicht soweit in Flash beschäftigt das ich diese Dinge automatisch in Actionscript erstellen lassen kann.

Ich will per Flash eine Slideshow erstellen. Vorerst nur mit einem Fade Effekt. Damit ich eine Vorstellung habe wie es ausschauen soll habe ich mir per Hand eine Beispielsslideshow erstellt. Zuerst habe ich die Bilder die angezeigt werden soll in die Bibliothek importiert. Dann habe ich sie in 2 Ebenen auf der Bühne plaziert und in Grafiken umgewandelt. In den 1. 25 Frames wird der Alphawert des Bildes 1 in der obersten Ebene von 0 auf 100% erhöht. In den nächsten 75 wird der Wert gehalten. Dann wird in den nächsten 25 Frames wird der Wert des 1. Bildes in der obersten Ebene wieder verringert. Zeitgleich wird der Alphawert des Bildes 2 in der 2. Ebene auf 100% erhöht usw. Eben ein Fade-Effekt.

Bis zu dem Erstellen des Movieclips komme ich per Actionscript nur dann schaltet mir alles aus. Wie kann ich eine derartige Animation automatisch per Actionscript generieren lassen kann.

Um mein Problem in einem Satz zu beschreiben:
Ich weiß weder wie ich Elemente mit einer bestimmten Größe, auf einer bestimmten Position, in einer bestimmten Ebene, auf einem Frame, mit einem entsprechenden Alphawert auf der Bühne platzieren kann noch wie ich die importierten Bilder in Flashgrafiken umwandeln kann die Alphawerte unterstützen.
Oder noch kürzer:
Ich habe keine Ahnung vom Umgang mit Movieclips über Actionscript.

Trotz langer Suche habe ich immer wieder nur Befehlsreferenzen gefunden aber nicht wirklich eine Seite oder ein Tutorial wo der genaue Umgang mit Movieclips über Actionscript beschrieben wird. Vielleicht kennt ihr Seiten wo ich mich über genau dieses Themengebiet schlau machen kann.

Ich verwende Flash MX 2004.

mfg Daniel
 
Hi,

Ich denke, in der Tutorials-Sektion wirst Du einiges finden, was Dir weiterhilft.

Generell:
  • Wenn Du die animierten Objekte mit ActionScript erstellst, brauchst Du keine Hauptzeitleiste; Objekte werden mit Intervallen oder onEnterFrame-Methoden animiert, dabei greifst Du auf Ereignisse zurück, die Dir sagen, wann ein Vorgang abgeschlossen ist und der nächte beginnen soll.

  • Leere MovieClips erstellst Du mit createEmptyMovieClip, vorhandene (aus der Bibliothek) bringst Du mit attachMovie auf die Bühne.

  • Auch wenn es Dir nicht so scheint, ist die Referenz in dieser Hinsicht ganz hilfreich: Die richtige Verwendung z.B. oder oben genannten Funktionen ist oft schon die halbe Miete. Schau Dir also an, welche Parameter die Methoden erwarten, und was sie zurückgeben.
Ich kann andererseits nur davor warnen, sich mit kleinen (oder kaum vorhandenen) AS-Kentnissen gleich an komplexere oder größere Projekte zu wagen. Probier alle Methoden, die Du kennenlernst erst einmal anhand von kleinen Beispielen aus: Probiere, einen MovieClip zu instanzieren und zu positionieren; erstelle eine kleine Animation mit onEnterFrame oder setInterval; lade etwas in einen Container, überwache den Fortschritt und skaliere den Container, sobald alle Daten geladen sind usw. ;)

Wenn Du gerne mit Büchern lernst, findest Du in unserer Buchecke auch einige z.T. recht gute AS-Lehrbücher.

Gruß

P.S.: Auf meiner Seite findest Du einige Slideshows zum Herunterladen; vielleicht hilft Dir ja die "Einsicht" in einigen Details etwas weiter.
.
 
Danke für die Infos. Ich werd mich mal über diese Befehle schlauer machen und mir mal die Tutorials in der Tutorialssektion genauer anschauen.
mfg Daniel
 
Ich hab mich mal ein bisschen schlauer gemacht und verstehe nun das Prinzip wie das ganze gemacht wird nur happerts jetzt an der Technik der Umsetzung. Ich habe mit Mühe und Not den folgenden Code zusammengezaubert. Nur leider will die Endlosschleife einfach nicht Funktionieren. Ich dachte mir zuerst eine Zählervariable hinzuzufügen und diese Mit den Intervallen hochzuzählen. Nur ist die Idee falsch und ich finde keine neue. Ihr werdet das Problem warscheinlich eh aus dem Quellcode sehen aber ich bin echt fertig mit meinen Versuchen und Lösungsansätzen.

PHP:
/*********************
* Variablen		  *
**********************/

// Bilder laden //
bild = new Array();
bild[0] = "bild1.jpg";
bild[1] = "bild2.jpg";
bild[2] = "bild3.jpg";
// Anzahl der Bilder //
anzahl = bild.length;
// Zähler für die Bilder // 
_root.bildnummer = 0;

/*********************
* Funktionen		 *
**********************/

// Fade in funktion //
function fadein(mc) {
	// Alpha erhöhen //
	if(mc._alpha != 100) {
		mc._alpha += 1;
	}
	// Fade in beenden //
	else {
		clearInterval(fade_in);
	}
}

// Bild anzeigen // 
function warten(nummer) {
		// Warten interwall Beenden //
		clearInterval(warten_var);
		// Fade out starten //
		fade_out = setInterval(fadeout, 10, _root["bilder" + _root.bildnummer]);
}

// Fade out funktion //
function fadeout(mc) {
	// Alpha erhöhen //
	if(mc._alpha != 0) {
		mc._alpha -= 1;
	}
	// Fade in beenden //
	else {
		clearInterval(fade_out);
	}
}

function zaehler() {
	if(_root.bildnummer == (_root.bild.length - 1)) {
		_root.bildnummer = 0;
	}
	else {
		_root.bildnummer++;
	}
}

function animation() {
	// einfaden //
	fade_in = setInterval(fadein, 10, _root["bilder" + _root.bildnummer]);
	// Bild halten und ausfaden //
	warten_var = setInterval(warten, 5000, _root.bildnummer);
	// Zähler erhöhen //
	zaehler_var = setInterval(zaehler, 4999);
}

/*********************
* Hauptprogramm	  *
**********************/

// Movieclips erstellen //
for(var i = 0; i<anzahl; i++) {
	this.createEmptyMovieClip("bilder" + i, i);
	this["bilder" + i].loadMovie(bild[i]);
	this["bilder" + i]._alpha = 0;
}

// Funktion das 1. Mal ausführen bis das 1. Interval Startet //
animation();

// Slideshow starten // 
fade = setInterval(animation, 5000);

mfg Daniel
 
Hi,

schaut auf den ersten Blick schonmal nicht schlecht aus. Wie sich ein Konstrukt aus 4 verschachtelten Intervallen verhält, lässt sich aber um einiges einfacher analysieren, wenn man die Datei vorliegen hat - vielleicht kannst Du die mal posten?

In einem solchen Fall würde ich wahrscheinlich eher onEnterFrame-Methoden verwenden (man spart sich Ärger mit ggf. nicht korrekt gelöschten Intervallen), aber im Prinzip geht es auch so, wie Du Dir es vorstellst.

Gruß
.
 
Also die Datei besteht eigentlich bis jetzt nur aus diesem Code. Einfach ein Keyframe mit diesem ActionScript. Der Rest übernimmt das Script.
Wie meinst du das genau mit den onEnterFrame Methoden. Vorerst fällt mir kein Lösungsansatz mit dieser Methode ein.
 
Stimmt eigentlich ;) - das war mein Standardsprüchlein, wenn ich mehr als 15 Zeilen Code ohne Anhang sehe; meist muss man sich zum Testen noch die gesamte Zeitleisten- und Objektstruktur nachbauen. Ich werde das nachher mal testen.

@onEnterFrame: Die Intervalle zwischen den einzelnen Animationen würd ich durchaus mit setInterval festlegen; die Animationen selber nicht unbedingt:
Code:
// Beispiel:
var clips = new Array(c1, c2, c3, c4);
var current = 0;

var iv = setInterval(nextOne, 5000);

function fadeTo(obj, a) {
    obj.onEnterFrame = function() {
        this._alpha += (a - this._alpha) / 4;
        if (Math.abs(a - this._alpha) < 1) {
            this._alpha = a;
            delete this.onEnterFrame;
        }
    }
}

function nextOne() {
    fadeTo(clips[current], 0);
    current ++;
    if (current >= clips.length) current = 0;
    fadeTo(clips[current], 100);
}
Das Beispiel entspricht natürlich nicht exakt Deinem Beispiel; es blendet lediglich 4 Clips im Abstand von 5 Sekunden ein und aus.

Gruß
.
 
Yeah. Ich habs nun endlich geschafft diese Diashow zu erstellen. Nun kann ich dynamisch per PHP die Bilderlinks an Flash übergeben und diese dann auf meiner HP Anzeigen lassen..... wären da nicht die üblen Macken von Actionscript.

Ich hab mich gerade schlau gemacht was das skalieren und positionieren von über Actionscript erstellten Movieclips betrifft:

Nach dem Erstellen der Movieclips sind die Höhe und die Breite des Movieclips logischerweise 0. Nur dass nach dem Einfügen eines Bildes der Movieclip nicht die Größe des Bildes annimmt scheint mir unlogisch, ist aber so.
Wie schaffe ich es nun am besten alle Movieclips so zu skalieren dass sie mit einem 10px Rand zentriert in den Film gesetzt werden. Würden die Movieclips per Hand erstellt werden würde ja dies Funktionieren:

PHP:
 ...
   	// Maximalgrößen //
   	var maxheight = this._height - 10;
   	var maxwidth = this._width - 10;
   	var mitteY = this._height / 2;
   	var mitteX = this._width / 2;
   ...
   	// Hochformat //
   	if(this["bilder" + i]._height > this["bilder" + 1]._width) {
   		hoehe[i] = this["bilder" + i]._height;
   		hoehe_neu[i] = maxheight;
   		
   		breite[i] = this["bilder" + i]._width;
   		breite_neu[i] = (breite[i] * hoehe_neu[i]) / hoehe[i];
   	}
   	// Querformat //
   	else {
   		breite[i] = this["bilder" + i]._width;
   		breite_neu[i] = maxwidth;
   		
   		hoehe[i] = this["bilder" + i]._height;		
   		hoehe_neu[i] = (hoehe[i] * breite_neu[i]) / breite[i];
   	}
   	
   	posY[i] = mitteY - (hoehe_neu[i] / 2);
   	posX[i] = mitteX - (breite_neu[i] / 2);	
   	
   	this["bilder" + i]._width = breite_neu[i];
   	this["bilder" + i]._height = hoehe_neu[i];
   	
   	this["bilder" + i]._x = posX;
   	this["bilder" + i]._y = posY;
 ...
Wie bekomme ich das nun mit diesem Problem hin.
Wäre euch wieder mal echt dankbar wenn ihr mir hier nochmals helfen könntet.

mfg daniel
 
hmm?
Nur dass nach dem Einfügen eines Bildes der Movieclip nicht die Größe des Bildes annimmt scheint mir unlogisch, ist aber so.
Exakt das tun sie normalerweise. ;) Wenn Du Bilder aus externen Quellen lädst, musst Du allerdings warten, bis die Datei komplett geladen ist.

Skalieren auf Maximalwerte:
Code:
var maxw = 640;
var maxh = 480;

var r = mc._width / mc._height;
var hr = mc._width / maxw;
var vr = mc._height / maxh;
if (hr > vr) {
    mc._width = maxw;
    mc._height = mc._width / r;
} else {
    mc._height = maxh;
    mc._width = mc._height * r;
}
Zentrieren:
Code:
var cx = 320;
var cy = 240;

clip._x = cx - clip._width / 2;
clip._y = cy - clip._height / 2;

Gruß
.
 
Also bei mir funktioniert diese Methode nicht ganz. Die Movieclips bleiben bei mir auch nach dem vollständigen Laden auf Höhe und Breite 0. Dann geht die ganze Berechnung in` Eimer und die Höhe und Breite wird auf 0 Skaliert und man sieht nichts mehr.

mfg daniel
 

Neue Beiträge

Zurück