Adobe Flash Bilder mit Delay nachladen und dazwischen ein "Blendeneffekt"

crazyjunk

Mitglied
Thread Starter
Registriert
31.10.2004
Beiträge
313
Hallo Leute!

Jetzt arbeite ich schon 3 Tage an ein und der selben Animation und krieg's nicht gebacken ...

Grundsätzlich geht's um folgendes File.
http://stuff.florianloimayr.at/effectTest01.fla

Hier sollte in gewissen Abständen (10-15 sekunden) folgendes passieren.
1) Der "Shutter" geht zu.
2) Neues Bild wird im Hintergrund geladen und dargestellt
3) Der "Shutter" geht auf.

Das Problem ist eben, dass das Bild laden usw so schnell geht, dass die beiden Animationen garkeine Zeit haben voll abzuspielen ..

der code, der den bildwechseln managen sollte sieht aktuell so aus:

PHP:
stop();
/* paar variablen initialisieren */
var isShutter:Number = 0;
var myLoader = new Loader();
var isLoaded:Boolean;
var imageWith:int = 700;
var imageHeight:int = 350;

trace(isShutter+" open");

/*button zum testen des shutters */
//myBtn.addEventListener(MouseEvent.CLICK, toggleShutter);

/* erstes bild laden und darstellen */
function init():void {
   loadImage("pic1.jpg");
   displayImage();
   }

/* shutter auf/zu machen */
function toggleShutter(/*evt:MouseEvent*/<:void {
      if (isShutter == 0) {
         myShutter.gotoAndStop('shutterIn');
         isShutter++;
         trace("closed");
         
      } else if (isShutter == 1) {
         myShutter.gotoAndStop('shutterOut');
         isShutter--;
         trace("open");
         }
   }
   
/* bild laden */
function loadImage(url:String):void {
   var myURL = new URLRequest();
   myURL.url = url;
   myLoader.load(myURL);
   myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
      function loaded(evt:Event):void {
         myLoader.width = imageWith;
         myLoader.height = imageHeight;
         trace("was geladen!"+ myLoader.width);
         isLoaded = true;
         }
   }

/* bild darstellen */

function displayImage():void {
   myImage.addChild(myLoader);
   }   
   
/* hier soll regelmäßig ein neues bild geladen werden */

function changePic():void {
   toggleShutter();
   loadImage("pic2.jpg");
   toggleShutter();
   }

init();

/*intervall */
setInterval(changePic, 5000);

//trace(loader);

Mein Problem ist immer noch, dass ich nicht wirklich abfragen kann, ob der "Shutter" jetzt zu ist. Also ob die Animation vollständig abgeschlossen ist.

Gibts denn keine boolean Property beim MovieClip die einfach asugibt ob sich der PlayHead bewegt oder nicht? Das würde mir denke ich einiges bringen, dann könnte ich sagen erst wenn der "Shutter" zu ist: Bild laden und darstellen, und dann Shutter aufmachen.

Und ich glaube vom grundsätzlichen Gedanken her kann ich ja garnicht soo falsch sein? Oder was meinen die Pro's hier drin?

Danke schonmal :)
Und grüße aus OÖ!
 

crazyjunk

Mitglied
Thread Starter
Registriert
31.10.2004
Beiträge
313
okay. hab die funktion erstmal so hinbekommen:

PHP:
////////////////////////////////
//      SHUTTER ANIMATION     //
////////////////////////////////

/* paar variablen initialisieren */
var isShutter:Number = 0;
var myLoader = new Loader();
var isLoaded:Boolean;
var imageWith:int = 688;
var imageHeight:int = 395;
var isInFinish:Number = 0;
var isOutFinish:Number = 0;
var numImages:Number = 6;
var startImages:Number = 1;
var myDelay:int = 10000;
var imagePath:String = "/assets/flash/src";
trace(isShutter+" open");

/*button zum testen des shutters */
//myBtn.addEventListener(MouseEvent.CLICK, toggleShutter);
//myBtn2.addEventListener(MouseEvent.CLICK, pushIt);



function pushIt():void {
	myShutter.addEventListener(Event.ENTER_FRAME, enterFrameAction);
	toggleShutter();
	
	
	function enterFrameAction(evt:Event) {
			if (isShutter == 0) {
				if (myShutter.shutterOut.myLineOut.currentFrame == 15) {
					trace("bin durch mit aufmachen");
					myShutter.removeEventListener(Event.ENTER_FRAME, enterFrameAction);
					isOutFinish = 1;
					} else {
						//trace("animieren");
						isOutFinish = 0;
						}
			} else {
				//trace("shutter enter frame" + myShutter.shutterIn.myLineIn.currentFrame);
				if (myShutter.shutterIn.myLineIn.currentFrame == 20) {
					trace("bin durch mit zumachen");
					if(startImages <= numImages) {
						trace("lade bild: "+imagePath+"/2/"+startImages+".jpg");
						loadImage(imagePath+"/2/"+startImages+".jpg");
						startImages++;
					} else {
						startImages = 1;
						loadImage(imagePath+"/2/"+startImages+".jpg");
						startImages++;
						}
					toggleShutter();
					isInFinish = 1;
					if(isInFinish == 1) {
						displayImage();
						}
					myShutter.removeEventListener(Event.ENTER_FRAME, enterFrameAction);
					} else {
						//trace("animieren");
						isInFinish = 0;
						}
				}
		}
}

/* erstes bild laden und darstellen  */
function init():void {
	loadImage(imagePath+"/2/"+startImages+".jpg");
	displayImage();
	startImages++;
	}

/* shutter auf/zu machen */
function toggleShutter():void {
		if (isShutter == 0) {
			myShutter.gotoAndStop('shutterIn');
			isShutter++;
			trace("closed");
			
		} else if (isShutter == 1) {
			myShutter.gotoAndStop('shutterOut');
			isShutter--;
			trace("open");
			}
	}
	
/* bild laden */	
function loadImage(url:String):void {
	var myURL = new URLRequest();
	myURL.url = url;
	myLoader.load(myURL);
	myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
		function loaded(evt:Event):void {
			myLoader.width = imageWith;
			myLoader.height = imageHeight;
			trace("was geladen!"+ myLoader.width);
			isLoaded = true;
			}
	}

/* bild darstellen */

function displayImage():void {
	myImage.addChild(myLoader);
	}	
	
/* hier soll regelmäßig ein neues bild geladen werden */	

function changePic(evt:MouseEvent):void {
	toggleShutter();
	if(isOutFinish == 1) {
		trace("würde bild laden");
		toggleShutter();
		} else {
			//loadImage("pic2.jpg");
			trace("tu nix");
		}
	//toggleShutter();
	}

init();

/*intervall */
setInterval(pushIt, myDelay);

//trace(loader);

auch wenn ich mit mir selbst rede:
ist das ein professioneller weg?

sonstige verbesserungstipps?

mfg
flo
 

Labrar

Mitglied
Registriert
07.09.2004
Beiträge
129
Ich hab jetzt deinen Code nur überflogen aber mit einer onEnterFrame Schleife und _currentframe kannst du eigentlich leicht abfragen ob deine Ani schon durch ist

Kleines Beispiel
PHP:
_root.onEnterFrame=function(){
    if(myShutter._currentFrame=='shutterIn'){
             delete _root.onEnterFrame;
             weitere Anweißungen
     }
}
 
Oben Unten