Poslao: 08 Okt 2008 13:45
|
offline
- Tamtitam
- Legendarni građanin
- Pridružio: 19 Maj 2005
- Poruke: 5224
- Gde živiš: Oslo
|
Da, sve je to bilo prilagodjeno za samo jedno dugme i jedan movieClip, zato nastaje guzva.
@beli
na zalost, nema bindable, ali u pravu si da u tome lezi problem. 'kliknuto' je zajednicko za svu dugmad i ako imamo vise dugmadi na sceni, ta jadna promenljiva ce se potpuno pogubiti.
Jednostavno receno- ne zna kome pripada...
E sad, ono sto si hteo sa bindable da uradis, mozemo postici sa uvodjenjem klase Dugme.
Na sceni imamo 3 movieClipa. Recimo da se zovu crveno, zeleno i zuto. Ta imena im damo i u properties. (naravno da mozes imati milion klipova, ne igra nikakvu ulogu)
Na sceni leze ,takodje, za svaki klip, tri odgovarajuca dugmeta (sa sve po dva frejma u njima kao i nasa prethodna dugmad).
Ovo je novo: klikni na svako dugme u library, desni klik->linkage ->zatim "ostriklaj" "export for ActionScript".
Pod class upisi Dugme- to je ime klase koju cemo da napisemo.
Idemo na new->ActionScript file (sad pisemo klasu ne .fla!)i tu, u nasu novu klasu, unesemo kod koji je zajednicki za svu dugmad (beli, hvala na poboljsanju koda!) :
class Dugme extends MovieClip {
public var kliknuto:Boolean;
public function Dugme(){
this.kliknuto=false;
this.onRelease=function(){
if(!kliknuto)
{
this.gotoAndStop(2);
}
else
{
this.gotoAndStop(1);
}
this.mc_koordinate._visible = this.kliknuto;
this.kliknuto = !this.kliknuto;
}
}
}
Ovo je , kao sto vidis, to sto nam je radilo posao do sada a nalazilo se u samom fla.
Sta smo postigli? Da svako dugme ima svoj sopstveni argument "kliknuto" te nece doci do brljanja sta je on a sta je off.
Nas .fla fajl vise nema onaj kod u sebi, ali sada moramo da vezemo svako dugme za odgovarajuci movieClip.
Udji u recimo, zeleno dugme. U prvom frejmu treba da stoji
stop();
_root.zeleno._visible=true; //zeleno je ime movieClipa kojim ovo dugme "upravlja"
a u drugom frejmu:
stop();
_root.zeleno._visible=false;
Ukoliko hoces da ti u startu sve bude nevidljivo, a da se pojavi kad kliknes, onda samo zameni "true" za false" i obrnuto.
You've got the idea... tako uradis za svaki par dugme-movieClip.
E sad, sacuvaj klasu pod imenom Dugme i svoj fla u isti direktorijum.
Ako nesto nisi uradio kako treba, proveri na primeru:
https://www.mycity.rs/must-login.png
https://www.mycity.rs/must-login.png
Na kraju treba samo da svoje klipove zamenis sa zutim, crvenim i zelemin klipom. Klasa ostaje ista.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 08 Okt 2008 15:21
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
pa mozda je uvodjenje klase malo preterano za tako jednostabnu operaciju..
Ako nema bindable, kao sto kazes, setter i getter su jednostavnije varijante:
private var _kliknuto:Boolean;
public function set kliknuto(value:Boolean):void
{
_kliknuto = value;
// ovde automatski ide dispatch eventa koji obavestava sve da se vrednost promenila
}
public function get kliknuto():Boolean
{
return _kliknuto;
}
|
|
|
|
Poslao: 08 Okt 2008 15:41
|
offline
- Tamtitam
- Legendarni građanin
- Pridružio: 19 Maj 2005
- Poruke: 5224
- Gde živiš: Oslo
|
Hmmm. Ne bi trebalo da se plasimo klasa... I MovieClip je klasa koju koristimo naveliko- samo sto ju je neko drugi napisao
Gledam tvoje resenje pa mi treba samo malo objasnjenje kako set i get rade posao u ovom slucaju. Ako imas 500 dugmadi na sceni od kojih je 250 on a 250 off... sta je onda vrednost za "kliknuto" ako ne pripada ni jednom objektu?
|
|
|
|
Poslao: 08 Okt 2008 16:07
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
a, pa to se onda ne radi tako. Kako je bilo postavljeno na pocetku, iz code-a se videlo da je zadatak samo da se setuje varijabla za on i off jednog digmeta.
Ako pak ima gomila dugmeta, trebala bi da postoji controller klasa, onako sve lepo "by the book", interfejs koja ona implementira, ili pak singleton controller u zavisnosti kako je aplikacija dizajnirana
.
Zato ja volim da koristim neki framework. Od najboljih izvajam najomrazeniji PureMVC, ali taj nije za male sisteme. Tu bi mozda MVC bio ok.
a setter i getter su jednostavno "property" za setovanje vrednosti. Dobro ih je koristiti jer na setter-u, se odradi bubbled dispatch eventa da je varijabla promenjena, tako da ko god ima vezanu tu varijablu, obavesten je da je vrednost promenjena.
|
|
|
|
|
Poslao: 08 Okt 2008 20:56
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
pa iskreno se nadam da se nece preplashiti.
Nije to strasno uopste. Narocito kad se malo prelistaju knjige, videce se da je lakse tako raditi nego bez. Narocito kada se pravi nesto vise od "test" aplikacije.
Do dushe, stoji cinjenica da se nista ne moze nauciti dok se ne krene sa ozbiljnim stvarima koje generisu ozbiljne probleme.
Nije na odmet procitati Design Patterns, u kom god jeziku se programira.
PS. Thanks, Tamtitam.
|
|
|
|
|
|
|