Avatar billede idiotbarn Nybegynder
29. august 2006 - 03:05 Der er 6 kommentarer og
1 løsning

setInterval går amok (Hastighed)

Jeg er ved at lave et "galleri" som skal slide fra siden. Jeg har et MC hvor jeg henter en SWF ind (preloader). Denne SWF henter på 32 små (65x65px) billeder ind i et MC, og placere dem på en linie efter hinanden. Med et interval på 40ms flytter den dette MC en px til den ene side.
Jeg mener jeg er sikker på alt bliver loaded inden den begynder at flytte på den. Det virker når man bare ser sin SWF, men inkludere man den på en side, går hastigheden helt i vejret.

Den bliver meget hurtigere og min mouseover virker ikke. Den har endda blevet hurtigere og hurtigere til tider. Opdatere jeg siden én eller to gange, kører den normalt.

Min slide funktion er:

function doSlide()
{
    PictureContainer._x = PictureContainer._x+1;
    if(PictureContainer._x-PictureContainer._width>Stage.width)
        PictureContainer._x = 0;
}


Er der nogen der har haft ligende problemer?

Det skal måske siges at jeg har flere flash elementer på siden, men det er det samme hvis jeg bare gør det kun med den
Avatar billede rohaje Nybegynder
29. august 2006 - 08:01 #1
får du slettet dit interval,inden du sætter et nyt?
Avatar billede idiotbarn Nybegynder
29. august 2006 - 15:48 #2
ja...eller, når jeg har lavet alt init. har jeg:
setInterval(doSlide,40);
Avatar billede idiotbarn Nybegynder
29. august 2006 - 16:08 #3
ok...kommet nærmere til problemet. Jeg er nød til at scale billederne i tilfælde af de ikke er præcis den størrelse de burde ha. Jeg har ikke kunnet få onLoad til at virke(http://www.actionscripts.org/forums/showthread.php3?threadid=13830 heller ikke med den), så efter det hele er loaded løber jeg alle billederne igennem og scaler dem:

    for(itr = 0;itr<ImageArray.length;itr++)
    {
        PictureContainer.createEmptyMovieClip("MC"+itr,PictureContainer.getNextHighestDepth());
        eval("PictureContainer.MC"+itr)._x=position;
        eval("PictureContainer.MC"+itr).loadMovie(PATH+ImageArray[itr]);
        position-=60;
        i++;
    }
intervalId = setInterval(ScaleAndStart,500);

function ScaleAndStart()
{
    clearInterval(intervalId);
    trace("End Scale");
   
    for(itr = 0;itr<ImageArray.length;itr++)
    {
        var Obj:Object = eval("PictureContainer.MC"+itr);
        //trace(Obj.getBytesTotal()+"!="+Obj.getBytesLoaded());
        if(Obj._width==0 || Obj.getBytesTotal()!=Obj.getBytesLoaded())
        {
            trace("Start Scale");
            intervalId = setInterval(ScaleAndStart,500);
            break;
        }
        else
        {
            Obj._width=50;
            Obj._height=50;
        }
    }
   
    _root.ready=true;
    trace("Start Interval");
    SlideId = setInterval(doSlide,40);
}

Hvis jeg dropper at scale dem, virker det fint. Hvilket jeg syntes er lidt underlig?
Avatar billede rohaje Nybegynder
21. september 2006 - 20:25 #4
hov,, troede du havde fået det til at virke..
hmm måske skulle du lave det på en lidt anden måde.. f.eks noget lign (det er ikke testet, men et skud fra hoften):

my_mcl = new MovieClipLoader();
my_listener = new Object();
my_listener.onLoadComplete = function(_mc) {
    _mc._width = 50;
    _mc._height = 50;
    // her kan safari browseren endnu ikke se width så vi laver
    // et lille enterframe loop med en if
    _mc.onEnterFrame = function() {
        if (this._width != undefined && this._width != 0) {
            delete this.onEnterFrame;
            this._width = 50;
            this._height = 50;
            loadDone(_mc);
        }
    };
};
my_listener.onLoadError=function(_mc){
    loadDone(_mc);
}
my_mcl.addListener(my_listener);

function loadDone(_mc){
    delete loadStatus[_mc];
    var done=true;
    for(var m in loadStatus){
        done=false;
    }
    if(done){
        SlideId = setInterval(doSlide, 40);
    }
}
       
position = 400;
loadStatus=new Object();
for (itr=0; itr<ImageArray.length; itr++) {
    PictureContainer.createEmptyMovieClip("MC"+itr, PictureContainer.getNextHighestDepth());
    var container = PictureContainer["MC"+itr];
    container._x = position;
    loadStatus[container]="loading";
    my_mcl.loadClip(PATH+ImageArray[itr],container);
    position -= 60;
    i++;
}
Avatar billede idiotbarn Nybegynder
21. september 2006 - 20:30 #5
Hej.
Jeg havde helt glemt tråden igen, sorry.

Problemet forsvandt da jeg undlod at ha flashen transparent, og så brugte jeg en moviecliploader til at hente filmene ind...det hjalp på det, og så virker listenerne også. Tak for hjælpen alligevel. Vi kan dele pointsne?
Avatar billede rohaje Nybegynder
21. september 2006 - 20:37 #6
tag dem bare selv :)
Avatar billede idiotbarn Nybegynder
29. oktober 2006 - 21:24 #7
ok, det gør jeg :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester