Pomoć - Pretraga - Članovi - Kalendar
Puna verzija: Delay
Dizajn Zona > Tehnike > Flash
guja
A pomagaj neko ako ume

CODE
on (rollOver) {

    do {
    _root.skrol1.linija1._x +=1;

                 // E SAD MI OVDE TREBA DELAY OD 10 do 30 msec

    } while (_root.skrol1.linija1._x<77);
}
gStyle
napravish funkciju koju prozivash kroz setInterval.
guja
^ daj primer molim te
istok
Gujo, lepo je to zamisljeno al u Flashu ipak treba malo drugaciji pristup. Ovako ti je najjednostavnije:

CODE
on(rollOver){
    _root.skrol1.linija1.onEnterFrame = function(){
            this._x +=1;
            if(this._x >=77){
                delete this.onEnterFrame;
            }
     }
}

Naravno to sve pod pretpostavkom da je linija1 movieClip. Ako nije, pretvori je.

Ovako ti je najlakse za pocetak. onEnterFrame znaci nesto tipa "ovo izvrsavaj XX puta u sekundi", gde je XX frejm rejt glavnog muvija. Moze se setovati nad bilo kojim movieClipom, ovde je bilo najzgodnije da se setuje na samu liniju.

Ako hoces da interval kontrolises bas u milisekundama nezavisno od frejm rejta, onda se koristi setInterval, samo za ovo sto tebi treba (10-30 ms) setInterval nista ne vredi jer ne moze da bude manji od duzine trajanja jednog frejma u muviju (osim ako nisi jedan od onih manijaka koji rade sa 120 fps).

setInterval je samo teorijski bolje resenje, u praksi je mnogo bolje da koristis onEnterFrame kad god mozes, a setInterval kad se mora. U ovom slucaju bi recimo mogao da podesavas "brzinu" linije tako sto menjas vrednost za koju se linija pomera u svakom koraku - tako bar posredno ne zavisis od frejm rejta glavnog muvija.

Ako ti iz nekih razloga ipak treba da podesavas pauzu tacno od 10-30 ms, vici pa da uradimo preko setInterval (pre toga digni frejm rejt filma na 120 fps i zaboravi na bilo kakve zahtevnije tweenove velikih i kompleksnih objekata)... cak i tada nece ti to nikad biti tacna vrednost u ms...
guja
^
Uuuuuuuuuu smile.gif hvala

evo upravo se drnadam sa getTimer() komandom i mislim da tu moze nesto da se odradi. a ovo sto si mi napisao je super fora ... idem da probam ... sve nogicama u dupence

Eh sad .. ne radi, ali ja mnogo ocu, a nisam i objasnio sta ocu.

Moram da roloverom na dugmence lagano mrdnem muviklip stotiak piksela u stranu.
posto je inace taj muviklip vec isciman brdom if iskaza za neke druge potrebe, ucinio mi se ovaj pristup logican... Ali sad vidim da sam sa pogresnog casa pobego smile.gif
syndrome
Err, zar nije ovako jednostavnije:
CODE
on (rollOver) {
 if(_root.skrol1.linija1._x < 77) _root.skrol1.linija1._x += .01; // obrati paznju na += .01
}


Meni je to krajnje logicno resenje... Ovako je movement 100 puta sporiji.

Mada ni ovako nece raditi rolleyes.gif
Moras da napravis controller za mouse hold event, tako sto ces isprogramirati button koji saradjuje sa glavnim mc-jem. Kad se mouse press desi setujes neku varijablu na true, a kad se desi mouse release -- false. Onda proveravas tu varijablu i ako je true, pomeras _root.skrol1.linija1 za neki korak sinhronizovan sa FPSom filma.

Proveru stavis u animirani ciklus koji kruzi uz pomoc gotoAndPlay(...) na nivou glavnog mc-ja.

glavni mc, recimo:
CODE
// prvi frejm
gfHold = false;
play();

// drugi frejm
if(gfHold) {
 if(_root.skrol1.linija1._x < MAX_MOVE) _root.skrol1.linija1._x += FRAME_STEP;
} else {
 stop();
}

// treci frejm
gotoAndPlay(_currentframe - 1);


i (nevidljivi) button, tacnije hitarea:
CODE
on(press) {
 gfHold = true;
 gotoAndPlay(_totalframes - 1);
}

on(release, releaseOutside) {
 gfHold = false;
}


Pogledaj i ovde

Ovo gore je iz glave, mozda nece raditi...
istok
Cemu to komplikovanje... zar ti nije proradilo onako...???

Btw. zaboravi na getTimer(), to je najgori moguci nacin da uradis to sto zelis. Nema jednostavnijeg i sigurnijeg nacina od onEnterFrame.
istok
CITAT (syndrome @ Oct 11 2005, 02:16)
Err, zar nije ovako jednostavnije:
CODE
on (rollOver) {
 if(_root.skrol1.linija1._x < 77) _root.skrol1.linija1._x += .01; // obrati paznju na += .01
}


Meni je to krajnje logicno resenje... Ovako je movement 100 puta sporiji.

Mada ni ovako nece raditi rolleyes.gif


Naravno da nece, Flash uvek uradi sve sto pise u jednom frejmu pa tek onda refreshuje screen. Mozes da stavis i _x+=.000001, dobices isti efekat.
syndrome
^^ Naravno, ali zar covek nije hteo da uspori stvar?
istok
CITAT (syndrome @ Oct 12 2005, 06:41)
^^ Naravno, ali zar covek nije hteo da uspori stvar?
*


Postoje i mnogo okrutniji načini da se plejer zakuca smile.gif
the
fino ste ovo raspravili...
čisto zapisnika radi, full varijanta onoga što je istok predložio. neke sitne prepravke, čisto da ti se ne bi dešavao scroll kada je na max poziciji i da definišeš i rollout varijantu...
CODE
_root.button.onRollOver = function() {
   this.onEnterFrame = function(){
       if(objekat._x >= max){
           delete this.onEnterFrame;
       } else {
           objekat._x +=1
       }
   }
   this.onRollOut = function(){
       delete this.onEnterFrame
   }
}
syndrome
CITAT (istok @ Oct 12 2005, 10:59)
Postoje i mnogo okrutniji načini da se plejer zakuca smile.gif
*
Izvini ako sam upao na ovu temu, ali moj kod je potpuno player-safe... Nisam imao nameru da te miniram, a najmanje sto mozes da kazes je da kazes "ok, hvala" umesto sto govoris da komplikujem i da zakucavam plejer. Frakcionalni pokreti ne mogu, ponavljam, ne mogu da zakucaju plejer! Zaista mi nije jasno o cemu govoris. Uostalom, u zivotu i forumu covek stice vremenom neki kredibilitet, jel? Kad smo kod foruma, mislis li zaista da sam urednik zbog toga sto pravim komplikovan i nebulozan kod?

A sto se komplikovanja tice, moj kod je za nijansu funkcionalniji i zato je malo duzi.. Ako nikom ne treba, to je ok -- ne morate ga upotrebiti, ali stojim iza toga da je fraza "taj kod zakucava plejer" losa za zapocinjanje konstruktivnog razgovora.

Tehnicki:
Moj kod nije postavljen na event-modelu, vec na timeline-u. To znaci da mu je neophodno da iterativno proverava stanje misa, tempom koji diktira FPS filma. Generalno, Flash ne moze reagovati brze od ovoga, zato sto je osvezavanje u oba slucaja prouzrokovano ulaskom u sledeci kadar. Event-based model je nesto bolji zato sto ne opterecuje film pokretanjem playheada koji dovodi do varijacija u grafici i/ili kodu...

Bas zbog toga postoji ovaj safeswitch koji zaustavlja animaciju:
CODE
if(gfHold) {
if(_root.skrol1.linija1._x < MAX_MOVE) _root.skrol1.linija1._x += FRAME_STEP;
} else {
stop(); // <- ovde
}
istok
Ej bre... lakše malo...

Mislio sam na ovo:
CODE
on (rollOver) {
if(_root.skrol1.linija1._x < 77) _root.skrol1.linija1._x += .01; // obrati paznju na += .01
}


Ja koliko vidim efekat ovoga biće taj da će svaki put kad on pređe mišem preko dugmeta linija samo da se pomeri za 0.01 piksel na desno i ništa više. Pa šta ako si urednik, svakom se desi da pogreši... evo i ja sam pogrešio pa me the ispravio...

Btw ono za zakucavanje plejera je bila pošalica... na tvoju opasku da je hteo da uspori stvar... zašto na svim forumima moraju da se dešavaju ovakva prepucavanja...???
syndrome
CITAT (istok @ Oct 13 2005, 11:10)
Ej bre... lakše malo...

Mislio sam na ovo:
CODE
on (rollOver) {
if(_root.skrol1.linija1._x < 77) _root.skrol1.linija1._x += .01; // obrati paznju na += .01
}


Ja koliko vidim efekat ovoga biće taj da će svaki put kad on pređe mišem preko dugmeta linija samo da se pomeri za 0.01 piksel na desno i ništa više. Pa šta ako si urednik, svakom se desi da pogreši... evo i ja sam pogrešio pa me the ispravio...

Pa da, ali lepo sam napisao:
CITAT (syndrome @ Oct 11 2005, 03:16)
Mada ni ovako nece raditi rolleyes.gif
*

Zato i postoji onaj kod ispod wink.gif

CITAT (istok @ Oct 13 2005, 11:10)
Btw ono za zakucavanje plejera je bila pošalica... na tvoju opasku da je hteo da uspori stvar... zašto na svim forumima moraju da se dešavaju ovakva prepucavanja...???
*
Ok. Sorry... Pre toga sam imao jos tri konflikta, pa sam postao preosetljiv...

Nemam nista protiv ako si se salio. Stavise! wink.gif
Samo si ubo izgleda pogresan trenutak.

I slobodno me ispravljajte.
Btw, dodji na takmicenje (fsas.orionsyndrome.com)
Ovo je "lo-fi" verzija našeg glavnog sadržaja. Da biste videli punu verziju, sa svim informacijama, formatiranjem ili slikama, molimo vaskliknite ovde.
Invision Power Board © 2001-2013 Invision Power Services, Inc.