Laiverd
%Europe/Berlin %460 %2005, 12:02
Ik heb hier een bug, waar ik al een tijd naar zit te kijken en die ik maar niet opgelost krijg. Even de situatie: een content_mc, bevat meerdere panel_mc's waarin onderdelen van een site worden geladen. Een functie loadMovies(arr) laadt de movies uit een array in die panels. Deze functie roept in een onEnterFrame iedere keer de functie loadMov (Obj) aan die het daadwerkelijke laden en de preloader functionaliteit voor z'n rekening neemt. Het laden verloopt allemaal prima, het enige is (de bug), dat wanneer ik loadMov (Obj) los aanroep, dat dan de preloader bar kortstondig verschijnt, om daarna spontaan te verdwijnen en niet meer terug te keren. Dat gebeurt voordat de movie is geladen. Ik kan maar niet ontdekken waar het in zit. het zit 'm in elk geval niet in de movie die wordt ingeladen, want als is een movie van een ander panel inlaadt, doet de fout zich ook voor. De panel_mc's zijn allemaal instances van hetzelfde symbool. Het zit 'm echt in het los aanroepen van loadMov (Obj).
Als je gaat kijken op http://www.laiverd.com/groundzero/persephone dan zie je ook dat de preloader bar onder main port er eenvoudigweg niet is, terwijl ie er bij andere onderdelen wel is.
De gebruikte functies (nogal een lap hoor):
// function that loads a movie
function loadMov (Obj)
{
// object name (string)
objStr = Obj;
// the actual object
Obj = eval (Obj);
// if the movie has not been loaded before, and it is not currently loading,
// we load it into target and start a preloader
if (Obj.hasLoaded == false && Obj.isLoading == false)
{
Obj.target._parent.preloader_mc._visible = true;
Obj.target.loadMovie (Obj.movie);
Obj.isLoading = true;
trace ("------------------------------------------");
trace ("Now loading : " + Obj.movie);
trace (Obj.target._parent.preloader_mc._visible)
// start preloader running
Obj.target._parent.preloader_mc.onEnterFrame = function ()
{
l = Obj.target.getBytesLoaded ();
t = Obj.target.getBytesTotal ();
p = Math.round (l / t * 100);
this.bar_mc._width = p;
trace (p);
if (l == t && t > 10)
{
// hide preloader
// this._visible = false;
// set hasLoaded flag
Obj.hasLoaded = true;
// trace (Obj.movie + ".hasLoaded = " + Obj.hasLoaded )
// trace (objStr + ".hasLoaded = " + Obj.hasLoaded);
delete this.onEnterFrame;
}
};
}
}
// function that loads movies stored as references in an array
function loadMovies (arr)
{
// number of movies to load
var numMov = arr.length;
// first movie to load
var currNum = 0;
// trace(currNum == numMov - 1);
// loop through the array to check if all movies have already been loaded;
// if not, start a loop, to load them
for (i = 0; i < numMov; i ++)
{
if (eval (arr [i]).hasLoaded == false && eval (arr [i]).isLoading == false)
{
_root.onEnterFrame = function ()
{
if (eval (arr [currNum]).hasLoaded == false && eval (arr [currNum]).isLoading == false)
{
loadMov (arr [currNum]);
} else if (eval (arr [currNum]).hasLoaded == true)
{
currNum ++;
// loadMov (arr [currNum]);
}
if (currNum == numMov)
{
initialising_mc._visible = false;
delete this.onEnterFrame;
}
}
break;
}
}
}
Elke input is welkom.
Tnx,
John
Als je gaat kijken op http://www.laiverd.com/groundzero/persephone dan zie je ook dat de preloader bar onder main port er eenvoudigweg niet is, terwijl ie er bij andere onderdelen wel is.
De gebruikte functies (nogal een lap hoor):
// function that loads a movie
function loadMov (Obj)
{
// object name (string)
objStr = Obj;
// the actual object
Obj = eval (Obj);
// if the movie has not been loaded before, and it is not currently loading,
// we load it into target and start a preloader
if (Obj.hasLoaded == false && Obj.isLoading == false)
{
Obj.target._parent.preloader_mc._visible = true;
Obj.target.loadMovie (Obj.movie);
Obj.isLoading = true;
trace ("------------------------------------------");
trace ("Now loading : " + Obj.movie);
trace (Obj.target._parent.preloader_mc._visible)
// start preloader running
Obj.target._parent.preloader_mc.onEnterFrame = function ()
{
l = Obj.target.getBytesLoaded ();
t = Obj.target.getBytesTotal ();
p = Math.round (l / t * 100);
this.bar_mc._width = p;
trace (p);
if (l == t && t > 10)
{
// hide preloader
// this._visible = false;
// set hasLoaded flag
Obj.hasLoaded = true;
// trace (Obj.movie + ".hasLoaded = " + Obj.hasLoaded )
// trace (objStr + ".hasLoaded = " + Obj.hasLoaded);
delete this.onEnterFrame;
}
};
}
}
// function that loads movies stored as references in an array
function loadMovies (arr)
{
// number of movies to load
var numMov = arr.length;
// first movie to load
var currNum = 0;
// trace(currNum == numMov - 1);
// loop through the array to check if all movies have already been loaded;
// if not, start a loop, to load them
for (i = 0; i < numMov; i ++)
{
if (eval (arr [i]).hasLoaded == false && eval (arr [i]).isLoading == false)
{
_root.onEnterFrame = function ()
{
if (eval (arr [currNum]).hasLoaded == false && eval (arr [currNum]).isLoading == false)
{
loadMov (arr [currNum]);
} else if (eval (arr [currNum]).hasLoaded == true)
{
currNum ++;
// loadMov (arr [currNum]);
}
if (currNum == numMov)
{
initialising_mc._visible = false;
delete this.onEnterFrame;
}
}
break;
}
}
}
Elke input is welkom.
Tnx,
John