Hi all!
I have a slideshow class, wich is nearly finished, but I have some problem with setInterval.
I think the setInterval is defined as it should be, but it doesn’t work:
var timerInterval = setInterval(this, “imageGen”, dataArray);
Could someone check the as code?
Thanks in advance
Zsolt
the whole thing:
http://www.graphis.eu/code/Crossfadi...eshowClass.zip
/**
* mod: www.graphis.eu
*
*
* FIXED
* variables witch were undefined are now fixed
*
* ERROR
* swapPlace function doesnt get executed ! Why????
*
*/
// packages
import mx.transitions.Tween;
import mx.transitions.easing.*;
// Broken Slideshow Class : http://www.actionscript.org/forums/showthread.php3?t=129798
// based on Todd Dominey's AS2 code from here:
// http://whatdoiknow.org/archives/001629.shtml
class Slideshow {
// Properties
private var order:String;
private var looping:String;
private var fadeTime:Number;
private var pauseTime:Number;
private var container_mc:MovieClip;
private var watcher_mc:MovieClip;
private var target_mc:MovieClip;
private var timerInterval:Number;
private var randomNum:Number;
private var randomNumLast:Number;
private var i:Number;
private var p:Number;
private var alphaTween:Tween;
// Constructor
public function Slideshow(target:MovieClip, depth:Number, x:Number, y:Number, imageArray:Array, fade:Number, pause:Number) {
trace ( "______ class Slideshow ______" );
// set default (and static for now) values for order and looping
order = "sequential";
looping = "yes";
// set target clip
target_mc = target;
// create the container clip
container_mc = target_mc.createEmptyMovieClip("container_mc", depth);
// movie clip containers
target_mc.container_mc.createEmptyMovieClip("loader1_mc", 2);
target_mc.container_mc.createEmptyMovieClip("loader2_mc", 1);
// preload watcher
watcher_mc = target_mc.createEmptyMovieClip("watcher_mc", 100);
// set container_mc position
target_mc.container_mc._x = x;
target_mc.container_mc._y = y;
fadeTime = fade;
trace ( " fadeTime " + fadeTime );
pauseTime = pause;
trace ( " pauseTime " + pauseTime );
randomNum = 0;
randomNumLast = 0;
imageGen( fadeTime, pause, imageArray );
}
//
private function imageGen( fadeTime, pause, dataArray ) {
trace ( " ___ func imageGen ______" );
// random, or sequential?
if (order == "random") {
// choose random # between 0 and total number of images
while (randomNum == randomNumLast) {
randomNum = Math.floor(Math.random() * dataArray.length);
}
loadImages( fadeTime, pause, dataArray, randomNum );
randomNumLast = randomNum;
} else if (order == "sequential") {
// start at 0, increment to total number of images, then drop back to zero when done
if (p == undefined || p == dataArray.length && looping == "yes") {
p = 0;
} else {
break;
}
loadImages( fadeTime, pause, dataArray, p);
trace ( " imagegen " );
trace ( " fadeTime " + fadeTime);
trace ( " pause " + pause);
trace ( " dataArray " + dataArray);
trace ( " p " + p );
p++;
}
clearInterval(timerInterval);
}
//
private function loadImages( fadeTime, pause, dataArray, num ) {
trace ( " ___ loadImages imageGen ______" );
trace ( " ___ fadeTime " + fadeTime);
trace ( " ___ pause " + pause);
trace ( " ___ dataArray " + dataArray);
trace ( " ___ p " + p );
trace ( " ___ i " + i );
trace ( " NOTE i is undefined " );
if (i == undefined || i == 2) {
i = 2;
createLoader( fadeTime, pause, i, dataArray, num );
i = 1;
} else if (i == 1) {
createLoader( fadeTime, pause, i, dataArray, num );
i = 2;
}
}
//
private function createLoader( fadeTime, pause, i, dataArray, num ) {
trace ( " ___ createLoader ______" );
trace ( " ___ fadeTime " + fadeTime);
trace ( " ___ pause " + pause);
trace ( " ___ dataArray " + dataArray);
trace ( " ___ p " + p );
trace ( " ___ i is i defined? " + i );
// I'm pretty sure the next line is one reason why it doesn't work
// How to refer to target_mc?
// var thisLoader:MovieClip = eval("container_mc.loader"+i+"_mc");
// thisLoader=eval("container_mc.loader"+i+"_mc");
var thisLoader:MovieClip = eval( "container_mc.loader" + i + "_mc");
trace ( " thisLoader = " + thisLoader );
thisLoader._alpha = 50; // this is the value wicht the mc has when the image is loaded in it // 50 for debug purpouses should be 0
thisLoader.loadMovie(dataArray[num]);
watcher_mc.onEnterFrame = function() {
var picLoaded = thisLoader.getBytesLoaded();
var picBytes = thisLoader.getBytesTotal();
if (isNaN(picBytes) || picBytes<4) {
return;
}
if ( picLoaded/picBytes >= 1) {
trace ( " ___ createLoader (picLoaded/picBytes>=1 ______" );
trace ( " ___ calling swapPlace ______" );
// I'm pretty sure the next line is another reason why it doesn't work
// swapPlace doesnt get executed why???
swapPlace( container_mc.loader2_mc, 1);
//
trace ( " ___ end calling swapPlace ______" );
// fade image
var alphaTween:Object = new Tween( thisLoader, "_alpha", Strong.easeOut, 50, 100, fadeTime, true);
trace("alphaTween="+typeof(alphaTween));
// 1 sec
// var timerInterval = setInterval(this, "imageGen", 1*1000, dataArray);
// for debug
var timerInterval = setInterval(this, "imageGen", dataArray);
trace ( " ___ createLoader ______" );
trace ( " ___ fadeTime " + fadeTime);
trace ( " ___ pause " + pause);
trace ( " ___ dataArray " + dataArray);
trace ( " ___ p " + p );
trace ( "this " + this + "__ " +typeof(this) );
// and yet:
trace("timerInterval type ="+typeof(timerInterval));
trace (" timerInterval " + timerInterval);
delete this.onEnterFrame;
}
};
}
//
private function swapPlace(clip, num) {
trace ( " ___ swapPlace ______" );
trace("swapPlace called");
// I'm pretty sure the next line is yet another reason why it doesn't work
// was
//eval(clip).swapDepths(eval( "container_mc.loader" + num + "_mc"));
eval(clip).swapDepths(eval( container_mc.loader + num + "_mc"));
}
}