PDA

Pogčedajte punu verziju : Flash Actionscript -> setInterval


dee
13. 08. 2007., 19:45
na simbolu imam actionscript:

onClipEvent (mouseDown) {

for(i=0 ; i < _global.jedinice[1] ; i++)
{
callI=setInterval(callback(i),100);
}
function callback(i)
{
this._height=i;

trace(i);
}
}


_global.jedinice[1] je nekakva globalna varijabla, nebitno. Ono sto zelim dobiti jest da na klink na simbol njegova visina ne skoci automatski na vrijednosti _global.jedinice[1] vec da se od nule animira do te vrijednosti.

nesto sa mojim setIntervalom ne valja a ne kontam sta.... anybody?

[edit: sve se ispravno odvije, prodje kroz sve vrijednosti, namjesti visinu simbola kako treba, jedino sto se sve dogodi trenutno]

ivanhoe
13. 08. 2007., 21:27
zapravo trebalo bi da se ne dogodi trenutno nego da sa zakasnjenjem od 100 pozove odjednom svih x puta callback (jer ga pozivas u petlji koja se odjednom izvrsi)
pisem napamet jer nemam flash pri ruci, ali ja bih probao nesto ovako:

onClipEvent (mouseDown) {
callback(1);

function callback(i) {
trace(i);
if(i < _global.jedinice[1]) {
this._height=i++;
setInterval(callback(i),100);
}
}

}


a moze i onako kako si ti krenuo samo da se izmeni setInterval:
setInterval(callback(i), 100 * i) tako da delay bude razlicit za svaki poziv

MrSteel
13. 08. 2007., 21:46
hoho,

pogledaj konstruktor za setInterval

dakle evo jedan primer
var intervalID : Number = setInterval(callback, 100, i)

dakle parametri su : ime funkcije, milisekunde, pa onda parametri, mozes da spucas koliko hoces

btw. pitanja za flash slobodno mozes u flash jer ce tamo lakse naci korisnici, sorry ako se to kosi sa pravilima foruma ali meni se cini da je bolje tamo da idu pitanja koja su direktno vezana za flash

e sad // ja danas okacio moju klasu za timer
easy to use + setInterval ima losu naviku u samo izuzetnim situacijama da clearInterval nece da pomogne
check OUT ! :) (http://devprotalk.com/showthread.php?p=40301#post40301)

dee
14. 08. 2007., 16:13
onClipEvent (mouseDown) {
callback(1);

function callback(i) {
trace(i);
if(i < _global.jedinice[1]) {
this._height=i++;
setInterval(callback(i),100);
}
}

}



ovo mi nije proradilo, ali ovo je:

onClipEvent (mouseDown) {
//trace(_global.jedinice[1]);
_global.i=1;
callI=setInterval(callback,10,_global.i);

function callback(i)
{
if(_global.i < _global.jedinice[1]){
_global.i++;
_root.instance1._height=_global.i;
//trace(_global.i);
}
else
clearInterval(callI);
}
}

nesto sam zapetljo sa globalnim varijablama...


tnx

dee
14. 08. 2007., 16:22
ajd da ne otvaram novi topic... ako ima neki fleser, da istrese neke osnovne cinjenice, nemam ovaj tren vremena kopat po manualu, treba mi za jucer... a osnove osnova su...

1) postoji li nacin da u prvom frejmu nekog lejera definiram funkciju koja je vidljiva u svim lejerima/frejmovima/funkcijama/simbolima/itditd...? kako?

2) ista stvar za varijablu?

3) kako mi je najbolje referencirati simbole sa razlicitih mjesta u moveClipu? drugim rijecima, postoji li neka analogija javascriptu sa getElementById()?

nixa
14. 08. 2007., 16:25
ti kad definises funciju ona je vidljiva na globalnom nivou ...

sto se tice varijabli ... postoji _global

sto se tice referenciranja postojis this.movicllipname.doSomething();

dee
14. 08. 2007., 16:53
ti kad definises funciju ona je vidljiva na globalnom nivou ...


ne znam jel do verzije flasha il do cega (ja ovdje imam 8), al kod mene je situacija:

1. layer 1. frame -> imam definiranu funkciju rezultati()
2. layer 2. frame -> tu imam simbol koji na MouseDown ima poziv:

rezultati();

taj poziv ne radi, ali kad napisem:

var dajrez:Function = _root.rezultati();
dajrez();

onda radi


sto se tice referenciranja postojis this.movicllipname.doSomething();

ista stvar...

kad iz funkcije u 1. layeru 1. frameu zelim promijenit height atribut simbola iz kojeg sam i zvao funkciju (2. layer 2. frame), radi samo ako zovem:

_root.instance1._height= nesto;


grijesim li negdje il je to ok?

MrSteel
14. 08. 2007., 18:39
pogledaj sta sam ti ja napisao tu ces naci lep odgovor za interval, ne znam sto to nisi ispratio

var dajrez:Function = _root.rezultati();
dajrez();

ide u stvari

var dajrez:Function = _root.rezultati;
dajrez();

bez zagrada

funkcija je vidljiva samo u onom objektu koji je definisao bez navodjenja gde je
ako je pozivas iz nekog drugog mesta onda moras definisati gde je kreirana

recimo kreiras funkciju u root-u
_root.ples = function() {
trace("ples");
}

i imas neki mc sa kodom unutar njega, znaci bas u njemu
onda ces do te funkcije doci preko _root.ples()

ako je neka funkcija definisana u actionscriptu movieclipa recimo
onda se ona pozivas sa mc.testFunc();

ako hoces ostavi FLA fajl sa kodom koji ti ne radi pa cu ti ispraviti

ivanhoe
14. 08. 2007., 20:34
ja sam se gore u mom postu izlupetao, ali nisam posle mogao da editujem poruku. Ja sam pisao kao za setTimeout(), a ne za setInterval(), a uz to parametri se prosledjuju kao sto je MrSteel rekao... znaci just ignore my post..

MrSteel
14. 08. 2007., 21:53
yea, ali setTimeout ne postoji u Flashu :) ima kao dodatna klasa napisan od strane drugih ali ne i ovako

toplo preporucujem moju klasu za timer funkcije ;)

ivanhoe
15. 08. 2007., 03:04
yea, ali setTimeout ne postoji u Flashu :) ima kao dodatna klasa napisan od strane drugih ali ne i ovako

http://theflashblog.com/?p=102

ovde kazu da ima, mada priznajem ja nisam to proveravao, nego mi se pomesao JS i actionscript... ma nebitno..

MrSteel
15. 08. 2007., 09:09
cool, jeste ima, a ja mislio neko se potrudio sa strane :D