I have a function (“advance_slideshow()”) that ticks a slide show up by one, then it loops back at the end. It works when called from the key listener I set up for debugging. However it does not work when called from setInterval. I added a trace to the function to confirm that it was being called, which it is; it just doesn’t work when called via the interval. Any ideas??
[This is Flash 8, AS2]
//////////////////////////
/* IMPORTS AND INCLUDES */
//////////////////////////
import mx.transitions.*;
import mx.transitions.easing.*;
#include "loader.as"
#include "strip_undefined.as"
#include "increment.as"
#include "fades.as"
#include "strip_zeroes.as"
//////////////////////////
/* SETTINGS, HARD CODE */
//////////////////////////
var slide_x:Number = 0;
var slide_y:Number = 0;
var slide_path:String = '../images/';
var slide_name:String = 'slideshow_breakfast_a_';
var slide_ext:String = '.jpg';
load_something('dte1', '../dte/', '.dte');
///////////////////////////////////
/* SETTINGS, FROM DEFAULT OR DTE */
///////////////////////////////////
var default_slideshow_length:Number = 4;
var default_slideshow_fade_duration:Number = 1;
var default_slideshow_slide_duration:Number = 5;
/////////////////////////////////
/* DO NOT EDIT BELOW THIS LINE */
/////////////////////////////////
//////////////////////////////////////////
/* TRIGGER CALLBACK - DISPLAY MODE ONLY */
//////////////////////////////////////////
function trigger_function(curr_object):Void {
trace('trigger ' + curr_object);
slideshow_length = strip_zeroes(this[curr_object].slideshow_length, default_slideshow_length);
slideshow_fade_duration = strip_zeroes(this[curr_object].slideshow_fade_duration, default_slideshow_fade_duration);
slideshow_slide_duration = strip_zeroes(this[curr_object].slideshow_slide_duration, default_slideshow_slide_duration);
/* CONVERT DURATIONS TO MILLISECONDS */
slideshow_fade_duration *= 10;
slideshow_slide_duration *= 1000;
init_slideshow();
slideshow_interval();
//add v2t
}
////////////////////////
/* SLIDESHOW INTERVAL */
////////////////////////
var slide_interval;
function slideshow_interval():Void {
if (slide_interval == undefined) {
slide_interval = new setInterval(advance_slideshow, slideshow_slide_duration);
//setInterval(advance_slideshow, slideshow_slide_duration);
//trace('slide_interval ' + slide_interval);
}
//else {
//theoretically, so interval can wait for tween motion complete
// clearInterval(slide_interval);
// }
}
///////////////////////
/* ADVANCE SLIDESHOW */
///////////////////////
function advance_slideshow():Void {
trace('advance_slideshow()');
//called from slideshow_interval()
cnt = increment(1, slideshow_length);
trace('cnt: ' + cnt);
//proceed only if there's more than one slide
if (slideshow_length > 1) {
if (cnt >= 3) {
//for moving bottom slide off stage when under two other slides
this['slide_mc' + (cnt - 2)]._alpha = 0;
this['slide_mc' + (cnt - 2)]._x = Stage.width;
this['slide_mc' + (cnt - 2)]._y = Stage.height;
}
if (cnt <= 1) {
//for fading out last slide back to first
this['slide_mc' + cnt]._x = slide_x;
this['slide_mc' + cnt]._y = slide_y;
this['slide_mc' + cnt]._alpha = 100;
this['slide_mc' + (slideshow_length - 1)]._alpha = 0;
//this['slide_mc' + slideshow_length]._alpha = 100;
fade_out(this['slide_mc' + slideshow_length], slideshow_fade_duration);
slideshow_interval();
//for fading in next slide over previous
}
else {
this['slide_mc' + cnt]._x = slide_x;
this['slide_mc' + cnt]._y = slide_y;
this['slide_mc' + cnt]._alpha = 0;
fade_in(this['slide_mc' + cnt], slideshow_fade_duration);
slideshow_interval();
}
}
else {
//for if there's only one slide
this['slide_mc' + 1]._x = slide_x;
this['slide_mc' + 1]._y = slide_y;
this['slide_mc' + 1]._alpha = 100;
this['slide_mc' + slideshow_length]._alpha = 100;
}
}
////////////////////
/* INIT SLIDESHOW */
////////////////////
//called from trigger_function(), which is callback from load_something()
var slide_interval;
var slide_loader_listener:Object = new Object();
function init_slideshow():Void {
//removed a parseInt on line below; take note
for (si = 1; si < parseInt(slideshow_length) + 1; si++) {
//create loader for each slide
this['slide_loader' + si] = new MovieClipLoader();
//create mc for each slide
this.createEmptyMovieClip('slide_mc' + si, this.getNextHighestDepth());
curr_ld = this['slide_loader' + si];
curr_mc = _level0['slide_mc' + si];
trace(curr_mc._name + '.getDepth ' + curr_mc.getDepth());
//load image into corresponding loader at idx
curr_ld.loadClip(slide_path + slide_name + si + slide_ext, curr_mc);
//hide all slides initially
curr_mc._alpha = 0;
curr_mc._x = Stage.width;
curr_mc._y = Stage.height;
//stop loading images after slideshow_length
if (si >= slideshow_length) {
curr_ld.addListener(slide_loader_listener);
slide_loader_listener.onLoadInit = function(target_mc:MovieClip) {
trace("last image loaded: " + target_mc);
};
}
}
}
///////////
/* DEBUG */
///////////
var listener:Object = new Object();
listener.onKeyDown = function():Void {
switch (Key.getCode()) {
case 65 :
trace('a pressed');
advance_slideshow();
break;
}
};
Key.addListener(listener);