Autor Zpráva
Hugof
Profil
Rád bych se věnoval v této rubrice elementárním příkladům řešení Actionscriptu. Sám jsem naprostý diletant, co do programování a Actionscript beru pouze, jako velmi nutné, o to větší zlo!

Proto přejdu hned ke konkrétnímu příkladu:

http://www.itsystem.cz/patek/hugos/flash/HALO2_01.html

Dlouho jsem se trápil, jak při svých chatrných znalostech definovat loop přehrávání jen části MC, až jsem došel k nejjednoduššímu řešení "GotoAndPlay ()"... Jenže vyvstal další problém - na "RollOver" akci (tedy při najetí myši na banner) jsem chtěl, aby se přehrával celý klip od začátku, tak, jak jsem to viděl na banneru Magnum, který jsem si upravil pro vlastní potřeby k obrazu svému takto:

http://www.itsystem.cz/patek/hugos/flash/Magnum_invent_2.html

(zde už jsem nehleděl na velikost klipu, protože mi šlo hlavně o parádičku, než o korektní datovou velikost - to byla v rámci HALO2 banneru taky docela fuška, vzdát se postupně všech efektíků s rozostřeními a Angličtinou na pozadí (i přesto, že jsem nakonec až neuvěřitelně rozbil písmo):

http://www.itsystem.cz/patek/hugos/flash/HALO2_banner_160x600bbb.html

To už v rámci jednoho klipu se skriptem "GotoAndPlay" nešlo - těžko bych tam ještě cpal "Stop", jak jsem pochopil...
Nakonec jsem to řešil bez "GotoAndPlay" v rámci původního klipu, celé jsem to rozdělil na dva klipy, které jsem umístil vedle sebe na Timeline pod "Button":

Na běžnou akci jedou oba klipy vedle sebe postupně celé, ale na konci druhého je "Stop", takže se v loop režimu přehrává jen druhý klip.
Na timeline "Button" je tedy pod:

"on( release ){
if ((!_root.clickthru) && (_root.clickTag)) {
_root.clickthru = _root.clickTag
}
getURL(_root.clickthru,_root.clickTarget)
}"


umístěn skript:

"on( rollOver ){
gotoAndPlay(1);
}"


takže se pak přehrávají oba klipy za sebou: http://www.itsystem.cz/patek/hugos/flash/HALO2_01.html

Má to jeden háček:

Když najedu myší na klip dříve, než dojede první část, nepřehrává se druhá část, ale banner si zbrklou akci myši "zapamatuje" a hned po první části přehrává znovu první část...

Existuje způsob, jak se tohohle bugu zbavit?
dredie
Profil
nevim, jestli to chapu dobre, ale snad jo. Takze takhle:

1. udelej si MC, do ktereho za sebe nastrkas ty dve animace a dej mu instance name treba myMc

2. na zacatek druhe animace dej frame label "start"

3. na konec druhe animace dej akci (do framu):

this.gotoAndPlay("start").

4. na hlavni casove ose na frame 1 dej skript:

this.myMc.onRollOver = function():Void{
if(this.currentFrame == this.totalFrames)
this.gotoAndPlay(1);
}
}

this.myMc.onRelease = function():Void{
getURL("www.neco.cz", "_blank");
}

nevim presne jestli je tohle to, o co ti jde, ale pochopil jsem to tak :)

d.
Hugof
Profil
Naopak! Odpověděls geniálně! ;o)

Volání URL budu muset zachovat "_root.clickthru" - jde o billboard, tudíž počítání kliků,
ale ta rutina pro RollOver vypadá skvěle!

Dík! ;o)
dredie
Profil
Hugof
jinak poznamka - nepouzivej skript pripojeny k instancim MC, je to matecne a dela to zbytecne problemy, navic to zamezuje jakekoli slozitejsi interaktivite a prehlednosti kodu :)
Hugof
Profil
To je fakt! Hledání AS v rámci tajmlajny je peklo, když člověk neví, kam ho dal! :oD
Hugof
Profil
Všimnul jsem si, že borci umisťují vždy AS do zvláštní tajmlajny, či do folderu s ASs... Zkusím si na tohle pravidlo zvykat - pokud to budu schopen vůbec zachovat se svými znalostmi... ;o)
dredie
Profil
Hugof
no ja myslel spis ten skript typu

on(release)

je to relikt AS 1.0, pravidlo je, ze se vse pise na 1. frame hlavni casove osy. Osobne pouzivam fragmenty skriptu vlozene do animaci na ruzne framy jen pro potreby synhchronizace animaci, jinak to totiz nema zadny smysl.
Hugof
Profil
Učím se spíš v úprku, než za pochodu... ;o)
Hugof
Profil
Jestli existují nějaké "semináře" diskuse Jak Psát WEB typu "na Gambáče U Milosrdnejch", tak se rád zúčastním! :o)
dredie
Profil
Hugof
asi zalezi na meste ;)
XXX
Profil
No u nas na Morave o nicem takovem nevim :( :-D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: