Bild als Moviclip erzeugen und nach Animation wechseln

Hi,

this.onEnterFrame = function() {
setInterval(countup, 1000);
Was Du hier machst, ist relativ verboten:

Erstens setzt Du mit jedem Frame (sprich 12 - 24 mal in der Sekunde) ein neues Interval auf die Funktion "countup".

Zweitens wird bei dieser Syntax die Intervalfunktion sofort ausgeführt. Versuch mal:
PHP:
setInterval(function() {countup(); }, 1000);
Nimm das Interval jedenfalls aus der enterFrame-Methode heraus - es wird automatisch in Sekundenabständen aufgerufen, auch wenn Du setInterval nur einmal ausführst.

Gruß
 
Hab jetzt das setIntervall rausgenommen aus dem enterFrame, aber jetzt macht es gar nichts mehr. Das swf läuft zwar, aber ich sehe keine Bilder mehr...
Help plz...

Code:
  var lv = new LoadVars();
  var pictures = new Array(); // Array für die Bild-MCs
  var amt = 0; // Anzahl der Bilder
  
  var distance = 185; // horizontaler Abstand der Bilder
  var width = 190; // Neue Breite der Bilder
  var height = 185; // Neue Höhe der Bilder
  var spd = 1; // Bewegungsgeschwindigkeit (Pixel/Frame)
  var dispwidth = 185; // Breite des "Fensters"
  
  lv.load("slideshow.txt");
  
  lv.onLoad = function() {
  	loadPics(this);
  }
  
  function loadPics(obj) {
  	display.container._visible = false;
  	for (var i=1; i<= obj.anzahl; i++) {
  		// MovieClip erstellen:
  		pictures[i] = display.container.createEmptyMovieClip("pic" + i, i);
  		pictures[i].pic = pictures[i].createEmptyMovieClip("pic", 1);
  		// Bilddatei einladen
  		pictures[i].pic.loadMovie("images-detail/"+obj["bild" + i]);
  	}
  	amt = obj.anzahl;
  	startLoad();
  }
  
  function startLoad() {
  	// Alle Bilder vorladen
  	var cur = 0;
  	var max = 0;
  	this.onEnterFrame = function() {
  		cur = 0;
  		max = 0;
  		all = true;
  		for (var i=1; i <= amt; i++) {
  			cur += pictures[i].pic.getBytesLoaded();
  			max += pictures[i].pic.getBytesTotal();
 			if (pictures[i].pic.getBytesLoaded() == 0 || pictures[i].pic.getBytesTotal() == 0) {
  				all = false;
  			}
  		}
  		trace("loading... " + cur + " of " + max);
  		if (cur >= max && all == true) {
  			startSlide(); // Slideshow beginnen
  		}
  	}
  }
  
  function startSlide() {		
  	for (var i=1; i <= amt; i++) {
  		pictures[i]._x = 0;
  		pictures[i]._y = 0;
  		pictures[i].pic._width = width;
  		pictures[i].pic._height = height;
  		pictures[i]._visible = false;
  	}
  	display.container._visible = true;
  	var z = 1;
  	setInterval(function(){countup();}, 1000);
  	this.onEnterFrame = function() {
  		function countup() {
  			pictures[z]._visible = false;
  			if(z>=amt){
  				z=1
  			}
  			else{
  				z = z + 1;
  			}
  			pictures[z]._visible = true;
  		}
  	}
  }
 
Hi,

nimm die Funktion "countup" aus der onEnterFrame-Methode heraus und setze sie als eigenständige Funktion ein (sprich: außerhalb der Funktion startSlide()).
PHP:
  function startSlide() {
	  delete this.onEnterFrame;
  	for (var i=1; i <= amt; i++) {
  		pictures[i]._x = 0;
  		pictures[i]._y = 0;
  		pictures[i].pic._width = width;
  		pictures[i].pic._height = height;
  		pictures[i]._visible = false;
  	}
  	display.container._visible = true;
  	var z = 1;
  	setInterval(function(){countup();}, 1000);
  }

  function countup() {
  	pictures[z]._visible = false;
  	if(z>=amt){
  		z = 1;
  	}
  	else{
  		z = z + 1;
  	}
  	pictures[z]._visible = true;
  }
Außerdem musst Du den onEnterFrame-Handler zu Beginn der Funktion startSlide löschen, da kein neuer definiert wird.

Funktioniert (getestet).

Gruß
.
 
Danke für die Hilfe, jetzt klappt es
http://barzille.de/test/picslideshow.swf .
Kannst Du mir jetzt noch sagen, warum ich rechts einen freien Rand habe?
Code:
var lv = new LoadVars();
var pictures = new Array(); // Array für die Bild-MCs
var amt = 0; // Anzahl der Bilder

var distance = 185; // horizontaler Abstand der Bilder
var width = 185; // Neue Breite der Bilder
var height = 185; // Neue Höhe der Bilder
var spd = 1; // Bewegungsgeschwindigkeit (Pixel/Frame)
var dispwidth = 185; // Breite des "Fensters"

lv.load("slideshow.txt");

lv.onLoad = function() {
	loadPics(this);
}

function loadPics(obj) {
	display.container._visible = false;
	for (var i=1; i<= obj.anzahl; i++) {
		// MovieClip erstellen:
		pictures[i] = display.container.createEmptyMovieClip("pic" + i, i);
		pictures[i].pic = pictures[i].createEmptyMovieClip("pic", 1);
		// Bilddatei einladen
		pictures[i].pic.loadMovie("images-detail/"+obj["bild" + i]);
	}
	amt = obj.anzahl;
	startLoad();
}

function startLoad() {
	// Alle Bilder vorladen
	var cur = 0;
	var max = 0;
	this.onEnterFrame = function() {
		cur = 0;
		max = 0;
		all = true;
		for (var i=1; i <= amt; i++) {
			cur += pictures[i].pic.getBytesLoaded();
			max += pictures[i].pic.getBytesTotal();
			if (pictures[i].pic.getBytesLoaded() == 0 || pictures[i].pic.getBytesTotal() == 0) {
				all = false;
			}
		}
		trace("loading... " + cur + " of " + max);
		if (cur >= max && all == true) {
			startSlide(); // Slideshow beginnen
		}
	}
}

function startSlide() {
      delete this.onEnterFrame;
      for (var i=1; i <= amt; i++) {
          pictures[i]._x = 0;
          pictures[i]._y = 0;
          pictures[i].pic._width = width;
          pictures[i].pic._height = height;
          pictures[i]._visible = false;
      }
      display.container._visible = true;
      var z = 1;
	  countup();
      setInterval(function(){countup();}, 2000);
  } 

function countup() {
	pictures[z]._visible = false;
	if(z>=amt){
		z=1
	}
	else{
		z = z + 1;
	}
	pictures[z]._visible = true;
}
 
Freier Rand?

Nun, entweder ist Deine Box zu breit, oder Du skalierst die Bilder mit den Variablen width und height falsch:
PHP:
var width = 185; // Neue Breite der Bilder
var height = 185; // Neue Höhe der Bilder
Gib hier einfach mal 20 Pixel drauf, vielleicht reichts ja. ;)

Gruß
.
 
So, dass hat alles super geklappt...
Jetzt noch eine Frage, besser gesagt 2!

1. Dieser Clip hat einen schwarzen Rahmen. Habe jetzt schon ganz viel durchgeklickt, aber nicht gefunden, wie ich den entfernen kann :(

2. Ich habe jetzt versucht, eine wie bereits weiter oben im Thread erwähnte PHP Datei zu erstellen. Habe die jetzt auch (imagelist.php) und sie läuft und liefert haargenau das gleiche Ergebnis wie die slideshow.txt. Beide liegen im Verzeichnis "images-detail". die swf Datei liegt auch da.
Binde ich jetzt das swf in die im Rootverzeichnis liegende index.php ein, schmiert Flash (und der Browser) ab, jedoch nur, beim Einlesen der Variablen über das PHP Script.

imagelist.php im Verzeichnis images-detail
Code:
 <?
 $verzeichnis = dir(".");
 $zaehler = 0;
 while($eintrag=$verzeichnis->read())
 if($eintrag != "." && $eintrag != ".." && $eintrag != "picslideshow.swf" && $eintrag != "imagelist.php") {
     $zaehler++;
     $bildnamen .= "bild".$zaehler."=".$eintrag."&amp;";
     $anzahl = $zaehler;
     #echo $bildnamen."<br>";
 }
 echo $bildnamen."anzahl=".$zaehler;
 ?>

index.php im Rootverzeichnis
Code:
 <object classid="clsid:-)27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="185" height="185">
                       <param name="movie" value="/images-detail/picslideshow.swf">
                       <param name="quality" value="high">
 <embed src="/images-detail/picslideshow.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="185" height="185"></embed>
 
Das Problem mit der PHP Datei hab ich gelöst, in dem ich am Anfang und am Ender der echo Ausgabe ein & Zeichen angehängt habe. Dann lief es. Aber den Rahmen bin ich immer noch nicht los. Hat jmd ne Idee?
 
Hi,

wenn Du immer noch mit der ursprünglich geposteten Datei arbeitest, findest Du im MC "display" die Ebenen "bg" und "frame". Dort ist der Rahmen vorgegeben.

Gruß
.
 
Super danke,
tja, wenn man sich ganz neu mit Flash beschäftigt, muss man viele Knöpfe drücken, bevor man ans Ziel kommt ;)
Barzi
 

Neue Beiträge

Zurück