Avatar billede bojohn Nybegynder
15. april 2003 - 14:44 Der er 10 kommentarer og
1 løsning

for-løkke og setInterval

Jeg har været ved at læse dette kapitel fra en bog fra "friends of ed": http://www.friendsofed.com/books/flash_mx_titles/fresh_flash/fresh_samplechapter.pdf
Kapitlet beskriver hvordan man vha setInterval kan omskrive en for-løkke, således at den bliver udført med intervaller.
Det vil jeg gerne have implementeret i min kode, men kan ikke helt greje den, -håber der er nogen der kan!

Min kode ser ud som følger:

onClipEvent (load) {
//initialisering af variabler
// Kassedimensioner (de kasser der indeholder billederne)
var box_height = 30;
var box_width = 40;
// Kolonnestart
var kolonne = 0;
// Hvor mange kasser er der plads til
var box_nr = 15;
// Hvor mange rækker skal der laves
var raekker = 5;
// Cellemellemrum
var x_box_margin = 1;
var y_box_margin = 1;
// Hvor starter kasserne
var x_offset;
var y_offset;
var i=0;

billedeXML = new XML();
billedeXML.ignoreWhite = true;
billedeXML.onLoad = function(success) {
       
if (success) {
billede = this.firstChild.childNodes;
           
//funktionen som jeg ikke kan få til at virke
function buildSomeStuff(i) {
if (i>box_nr)clearInterval(forInterval);
           
           
//Min for-løkke som virker
//for (i=0; i<box_nr; i++)
//{
               
               
// Hvis der er 5 kasser i en kolonne, skal den starte en ny kolonne   
if (i%raekker == 0) {
x_offset = (kolonne*box_width)+(kolonne*x_box_margin)+x_box_margin;
y_offset = y_box_margin;
kolonne++;
}

billedet = _root.frame.attachMovie("attach_test", "attach"+i, i);
// Placerer attach_MC
billedet._x = x_offset;
billedet._y = y_offset;
//sålænge der er billeder nok skal den bare loade billeder ind i det attachede MC

if (i<billede.length) {
// Henter den eksterne billede og putter den ind i attach[x] MC
billedet.loadMovie("images/"+billede[i].attributes.url);
//trick så billerne ikke står og blævrer
billedet._alpha = 99;
//laver et tekstfelt til beskrivelsen
_root.frame.createTextField("beskrivelse"+i, i+100, 0,160,124,30);
_root.frame["beskrivelse"+i].text = billede[i].attributes.beskrivelse.toUpperCase();
_root.frame["beskrivelse"+i].textColor=0xB4B9AB;
format= new TextFormat();
format.font="kroeger 05_55";
format.size=8;
_root.frame["beskrivelse"+i].setTextFormat(format);
_root.frame["beskrivelse"+i]._visible = false;
//Henter effekten som skal ligge ovenpå
onmouseover = _root.frame.attachMovie("mouseover", "onmouseover"+i, i+billede.length+30);
// Placerer onmouseovereffekten
onmouseover._x = x_offset;
onmouseover._y = y_offset;
//sætter actions på onmouseover
onmouseover.onRelease = function() {
getURL("http://www.jonasfunk.net", "_blank");
};
onmouseover.onRollOver = function() {
this.gotoAndPlay("start");
tal1=this._name.charAt(11);
tal2=this._name.charAt(12);
_root.frame["beskrivelse"+tal1+tal2]._visible = true;
};
onmouseover.onRollOut = function() {
this.gotoAndPlay("stop");
tal1=this._name.charAt(11);
tal2=this._name.charAt(12);
_root.frame["beskrivelse"+tal1+tal2]._visible = false;
};
//Giver billedet et nummer som hentes fra XML filen
onmouseover.billede_nr = billede[i].attributes.nr;
//Henter en fade effekt ovenpå billedet
fader = _root.frame.attachMovie("fader", "fader"+i, i+billede.length+60);
// Placerer fadeeffekten
fader._x = x_offset;
fader._y = y_offset;
}//end if
x_offset += 0;
y_offset += box_height+y_box_margin;
} //end buildsomestuff
//}//end for
}// end if
};
//end function success
billedeXML.load("test.xml");
}//end onload

Hvad koden genererer kan ses på http://www.freiheits.com/attachmovie.html

Det jeg gerne vil, er at hvert billede kommer ind i rammen  hver for sig, istedet for på én gang som det er nu.
Avatar billede bojohn Nybegynder
15. april 2003 - 14:49 #1
Glemte måske lige at tilføje at det er setInterval-funktionenen, som jeg regner til skal tilføjes efter "} //end buildsomestuff", som jeg gerne vil have hjælp til.
Avatar billede storslem Nybegynder
15. april 2003 - 16:27 #2
En måde at gøre det på, kunne vel være at indsætte en forløkke (i din forløkke) som tæller til et meget højt tal, f.eks. 50000000, sådan at der opnås et lille delay imellem hver iteration.
Avatar billede bojohn Nybegynder
15. april 2003 - 16:39 #3
Tak for svaret Storslem.
Prøvede det lige, men det får bare min computer til at afbryde scriptet. Det giver heller ikke den nøjagtighed, som man ville opnå ved SetInterval må man formode, da det kommer an på hvor hurtigt ens computer kan løbe igennem den løkke. Kunne du finde ud af at lave funktionen med setInterval, så ville det være cool!
Avatar billede storslem Nybegynder
15. april 2003 - 17:01 #4
okay - prøvede også lige, 50000000 er nok for stort et tal, men med 5000 opnåede jeg et fint "delay"... kigger lige på setInterval. (;
Avatar billede storslem Nybegynder
15. april 2003 - 17:13 #5
(Husk at give din "delay-forløkke" en ny kontrolvariabel, altså ikke "i".)
Avatar billede mat Nybegynder
15. april 2003 - 17:40 #6
Jeg har ikke helt overblik over din kode, men du skal skrive en funktion til din setInterval der gennemløbes med et givent interval, ex:

offset = 10;
i = 10;
function getMovieClip() {
    _root.attachMovie("clip", "clip"+i, i);
    _root["clip"+i]._x = _root["clip"+i]._x+(offset*i);
    i+=10;
}
setInterval(getMovieClip, 1000);

Men måske er det nemmere hvis du attacher dem som du gør nu, men med _visible = 0 og så laver din funktion til at rendere _visible = 1 ?

Jeg kan ikke finde dit "forInterval", er det bare mig der er blind?

Dunno if it helps?

mvh mat
Avatar billede storslem Nybegynder
15. april 2003 - 17:56 #7
ja, du kan, som mat foreslår det, droppe din forløkke, lave hele blokken om til en funcion, og så kalde den vhja. setInterval. Jeg kan ikke lige umiddelbart greje en sammenskrivning af setInterval og for-løkken...

>>> mat, din gamle flash-hippie... skal vi ikke snart ses til fredagsbar??
Avatar billede bojohn Nybegynder
15. april 2003 - 18:11 #8
Det er rigtigt at min setInterval mangler.
Jeg fik skidtet til at virke ved at kigge på mat's kode.
Jeg var ved at stoppe min setIntervalfunktion fuld af parametre, så det var derfor det ikke virkede.
Hvis du(mat) smider et svar, kan jeg give dig point.
Og tak for hjælpen storslem, -og så håber jeg, at I finder ud af noget med den fredagsbar:)
Avatar billede mat Nybegynder
15. april 2003 - 18:24 #9
svar :)

storslem > hva hulen?!?, giv dig til kende ;) - øl er godt, men den fredagsbar er ved at være lidt ærgelig, så øl er jeg med på :)

mvh mat
Avatar billede storslem Nybegynder
15. april 2003 - 19:07 #10
...der er da mig mojito-David fra den gamle skole - det ved du da!!??
Avatar billede mat Nybegynder
15. april 2003 - 19:12 #11
nåeh for hulen, fredagsbaren har åbentbart dræbt flere hjerneceller end jeg troede :P

..du siger bare til, så tager vi en stak bajere - kan være vi snart skal have en reunion? :P :)
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