Array außerhalb einer Funktion verfügbar machen

Richtig gesehen :)
Das stop() hat im ersten Frame gefehlt.
Nun klappt es! Danke!
Das verlinken der einzelnen Bilder hab ich auch hinbekommen.

Jetzt will ich, dass sich die Bilder selbständig, der Reihenfolge nach, auswechseln,
solange keiner der Buttons 1 bis 3 gedrückt wird.

Jedoch weis ich nicht, wie man den onPress Status des Buttons abfragen kann.
Vielleicht so, wie hier angegeben? (funktionieren tut es jedenfalls nicht)
Code:
while ( !this["but1"].onPress ) {
   setTimeout(2000);
   showImage(1);
   setTimeout(2000);
   showImage(2);
   setTimeout(2000);
   showImage(0);
}

Oder muss man das ganze anders angehen, z.B. die Bilder einzelnen Frames
zuweisen (wenn das geht). Über einen Lösungsansatz würde ich mich freuen :)
 
Hi,

probiers auf die Schnelle mal mit diesem Code in Frame 2 (ungetestet):
Code:
//-- START IMAGE LADEN UND ANZEIGEN small_gallery.fla -->
//trace(simages);
var images = new Array(simages.length);
var loaded = 0;
// Anzahl der geladenen Bilder
var current = 0;
// Aktuell angezeigtes Bild
var container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
container._x = 50;
// Position für die Bilder festlegen
container._y = 100;
container._visible = false;
// Zunächst unsichtbar

var iv = 0;

for (var i = 0; i<images.length; i++) {
	images[i] = container.createEmptyMovieClip("image"+i, i);
	images[i].loadMovie(simages[i]);
	// Bild laden
	this.attachMovie("button", "but1", this.getNextHighestDepth());
	this.attachMovie("button", "but2", this.getNextHighestDepth());
	this.attachMovie("button", "but3", this.getNextHighestDepth());
	
	with (this["but1"]) {
		_y = 400;
		// Buttons positionieren
		_x = 1*(_width+2)+50;	
	}
	this["but1"].onPress = function() {
		clearInterval(iv);
		showImage(0);
		//currentLink = slink[1];
	}
	with (this["but2"]) {
		_y = 400;
		// Buttons positionieren
		_x = 2*(_width+2)+50;	
	}
	this["but2"].onPress = function() {
		clearInterval(iv);
		showImage(1);
		//currentLink = slink[2];
	};
	with (this["but3"]) {
		_y = 400;
		// Buttons positionieren
		_x = 3*(_width+2)+50;	
	}
	this["but3"].onPress = function() {
		clearInterval(iv);
		showImage(2);
		//currentLink = slink[2];
	};
	
}
preloadImages();


function preloadImages() {
	// Auf das Laden aller Bilder warten
	this.onEnterFrame = function() {
		for (var i = 0; i<images.length; i++) {
			if (images[i].isloaded == undefined) {
				if (images[i]._width>1) {
					images[i].isloaded = true;
					loaded++;
				}
			}
			image[i]._visible = false;
		}
		if (loaded>=images.length) {
			container._visible = true;
			this.onEnterFrame = function() {
				startSlide();
				delete this.onEnterFrame;
			};
		}
	};
}
function showImage(nr) {
	// Ein Bild anzeigen
	for (var h = 0; h<images.length; h++) {
		this["but" + (h + 1)]._visible = true;
		if (h == nr) {
			images[h]._visible = true;
		} else {
			images[h]._visible = false;
		}
	}
}

function startSlide() {
	current = -1;
	nextImage();
	iv = setInterval(this, "nextImage", 2000);
}

function nextImage() {
	current ++;
	showImage(current);
}

Einzelne Frames für die Bilder anzulegen wäre auf jeden Fall der falsche Ansatz, da dynamische Inhalte (Scripte) und Frames eine Kombination sind, die oft zu Problemen führt.

Gruß
.
 
Klappt er läuft durch.
Da das ganze aber am Ende nicht aufhören soll,
sondern wieder von vorne laufen soll, hab ich die Funktion nextImage()
ein wenig erweitert. Klappt auch, aber danach zeigt er die Bilder nicht mehr
in der richtigen Reihenfolge an.

P.S. Der Parameter "from" in der Funktion "startSlide(from)" ist für die Buttons
gedacht damit beim Klick auf einen Button der Wechsel immer vom jetzigen,
durch den Button ausgewählten, weiterläuft und nicht immer von Bild 1.

Code:
//-- START IMAGE LADEN UND ANZEIGEN small_gallery.fla -->
//trace(simages);
var images = new Array(simages.length);
var loaded = 0;
// Anzahl der geladenen Bilder
var current = 0;
// Aktuell angezeigtes Bild
var container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
container._x = 50;
// Position für die Bilder festlegen
container._y = 100;
container._visible = false;
// Zunächst unsichtbar

var iv = 0;

for (var i = 0; i<images.length; i++) {
	images[i] = container.createEmptyMovieClip("image"+i, i);
	images[i].loadMovie(simages[i]);
	// Bild laden
	this.attachMovie("button", "but1", this.getNextHighestDepth());
	this.attachMovie("button", "but2", this.getNextHighestDepth());
	this.attachMovie("button", "but3", this.getNextHighestDepth());
	
	with (this["but1"]) {
		_y = 400;
		// Buttons positionieren
		_x = 1*(_width+2)+50;	
	}
	this["but1"].onPress = function() {
		clearInterval(iv);
		showImage(0);
		startSlide(0);
	}
	with (this["but2"]) {
		_y = 400;
		// Buttons positionieren
		_x = 2*(_width+2)+50;	
	}
	this["but2"].onPress = function() {
		clearInterval(iv);
		showImage(1);
		startSlide(1);
	};
	with (this["but3"]) {
		_y = 400;
		// Buttons positionieren
		_x = 3*(_width+2)+50;	
	}
	this["but3"].onPress = function() {
		clearInterval(iv);
		showImage(2);
		startSlide(2);
	};
	
}
preloadImages();


function preloadImages() {
	// Auf das Laden aller Bilder warten
	this.onEnterFrame = function() {
		for (var i = 0; i<images.length; i++) {
			if (images[i].isloaded == undefined) {
				if (images[i]._width>1) {
					images[i].isloaded = true;
					loaded++;
				}
			}
			image[i]._visible = false;
		}
		if (loaded>=images.length) {
			container._visible = true;
			this.onEnterFrame = function() {
				startSlide(0);
				delete this.onEnterFrame;
			};
		}
	};
}
function showImage(nr) {
	// Ein Bild anzeigen
	for (var h = 0; h<images.length; h++) {
		this["but" + (h + 1)]._visible = true;
		if (h == nr) {
			images[h]._visible = true;
		} else {
			images[h]._visible = false;
		}
	}
}

function startSlide(from) {
	current = -1+from;
	nextImage();
	iv = setInterval(this, "nextImage", 2000);
}

function nextImage() {
	current ++;
	showImage(current);
        if(current == 3) {
		startSlide(0);
	}
}
 
Hat sich erledigt.
Hab das
Code:
clearInterval(iv);
vergessen!
Nun funktioniert es tadellos.
Werde mich jetzt über ein paar Effekte informieren,
damit die Bilder nicht einfach so auftauchen und wieder verschwinden,
damit der Übergang sanfter ist.
 
Hab im Forum eine FLA von dir gefunden, da gibt es zwei Funktionen.
Einmal fürs Einblenden und einmal fürs Ausblenden.
Ich hab versucht die zwei Funktionen einzubauen aber entweder
wurde kein Bild angezeigt oder nur das erste.

Mir geht es um diese zwei Funktionen:
Code:
                pic[i]._alpha = 0;
		pic[i].nr = i;
		pic[i].go = function() { // Einblenden
			this.onEnterFrame = function() {
				this._alpha += (100 - this._alpha) / 4;
				if (this._alpha >= 98) {
					this._alpha = 100;
					// this._parent.nextPic(this.nr);
					// ruft Funktion zum Anzeigen des
					// nächsten Bildes auf
					delete this.onEnterFrame;
				}
			}
		}
		pic[i].hold = function() { // Ausblenden
			this.onEnterFrame = function() {
				this._alpha += (0 - this._alpha) / 4;
				if (this._alpha <= 2) {
					this._alpha = 0;
					delete this.onEnterFrame;
				}
			}
		}

Den Array pic[i] hab ich in images[i] umbenannt.
Den oberen Code teil hab ich unter
Code:
images[i].loadMovie(simages[i]);
geschrieben.
Und die Funktionen selber hab ich in der showImage(nr) Funktion aufgerufen.

Code:
function showImage(nr) {
	// Ein Bild anzeigen
	for (var h = 0; h<images.length; h++) {
		this["but"+h]._visible = true;
		if (h == nr) {
			//images[h]._visible = true;
                        images[i].go();
		} else {
			//images[h]._visible = false;
                        images[i].hold();
		}
	}
}

Anbei die aktuelle FLA Datei.
 

Anhänge

  • specials_flash8.fla
    30 KB · Aufrufe: 37
Hi,

das kann nicht funktionieren, da die Funktionen "go" und "hold" durch die loadMovie-Aktion überschrieben werden.

Wie gesagt: Nicht alle Scripte lassen sich einfach kombinieren. ;)

Gruß
.
 
Ok^^
Aber lässt sich das mit diesem Script machen, also die Bilder ein und aus faden lassen,
oder muss man dafür das Script größtenteils umschreiben?
Weil die Funktionen go() und hold() z.B. nicht kompatibel sind,
stellt sich mir die Frage ob ich das mit dem loadMovie anders machen muss,
oder es eine andere Möglichkeit mit dem Ein und Ausblenden gibt.

Für einen Tipp wär ich dankbar :)
 
oder muss man dafür das Script größtenteils umschreiben?
Das würde ich empfehlen. Alles, was Du bisher durch Zusammenkopieren erreicht hast, lässt sich bequem in einem einzigen Frame (und vor allem: weitaus übersichtlicher) erreichen.

Ich empfehle Dir, die gefundenen Scripte zu analysieren und zu verstehen, und dann aus den gewonnenen Kenntnissen etwas eigenes zu erstellen.

Gruß
.
 
Hab mir eine eigene, einfache FadeIn Funktion gebaut.
Die Sache ist, dass er das natürlich ohne Verzögerung ausführt
und somit das Bild sofort auf Alpha 100 ist.
In Flash gibt es ja leider keine wait() Funktion. :mad:
Wie müsste man z.B. das setInterval() hier einsetzen damit
der Alpha Wert so alle 0.2s um 1 erhöht wird?

Code:
function showImage(nr) {
	//Link zuweisen
	container.onPress = function () {
                getURL(slinks[nr]);
 	}  
	// Ein Bild anzeigen
	for (var h = 0; h<images.length; h++) {	
		if (h == nr) {
			images[h]._visible = true;
			images[h]._alpha = 30;
			fadeIn(h,images[h],images[h]._alpha);
			
		} else {
			images[h]._visible = false;
		}
	}
}

function fadeIn(h,image,startalpha) {
	for(var i=0; i<71; i++) {
		newalpha = startalpha + i;
		image._alpha = newalpha;
		trace("#"+i+": Current Alpha of Image ("+h+") = "+newalpha);
	}
}
 

Neue Beiträge

Zurück