Przypisanie wartości do zmiennej

0

Witam,
mam następujący problem, który raczej nie jest zbytnim wyzwaniem.

Chce stworzyć zmienną, powiedzmy 'tmp', globalną, lub inną, która może być wykorzystana na dowolnej warstwie w dowolnym zdarzeniu.
Następnie na jednej warstwie mam MC, w którym jest powiedzmy 5 przycisków. Gdy nacisnę na pierwszy przycisk: tmp=1, gdy na drugi: tmp=2, gdy na trzeci: tmp=3, itd. Po wciskaniu tych przycisków nie ma się nic otwierać, ma się ustawiać tylko zmienna.
Na innej warstwie mam inne przyciski, które po wciśnięciu sprawdzają zmienną 'tmp' i w zależności od jej stanu wykonują zwykłe _root.gotoAndStop("...")

czyli coś typu (o ile jest to w ogóle poprawne w AS):

if (tmp=1)
{ _root.gotoAndStop("a") }
else
if (tmp=2)
{ _root.gotoAndStop("b") }
...itd

Z góry dziękuję za pomoc.

1

Zmienną globalną tworzysz w ten sposób:
global.tmp = wartość;

A ustawiasz wartość po kliknięciu przycisku za pomocą:

nazwa_przycisku.onRelease = function() {
tmp = 1;
}

Tak samo z podejmowaniem decyzji co wykonać:

nazwa_przycisku.onRelease = function() {
switch(tmp)
{
case 1:
//jakaś akcja
case 2:
//jakaś akcja
default:
//jakaś akcja
//itd...
}
}

Za pomocą if-ów też możesz, ale imo case jest w tym wypadku wygodniejsze.

0

Bardzo dziękuję za pomoc, lecz mam jeszcze jedno pytanie.

Z AS jestem noga, nigdy wcześniej nie używałem dlatego się nie znam, ale sposób jaki pisałeś,
wygląda na taki, że mógłbym umieścić ten cały kod sobie gdzieś w scenie głównej bo i tak
odwołuje się bezpośrednio do konkretnego przycisku gdy jest wciśnięty,
czy się mylę i muszą być przypisane do odpowiadając im przyciskom?

A drugie pytanie to w którym miejscu powinienem zainicjować tą globalną? Mogę byle gdzie na głównej?

0

BTW w ECMAscript operator porównania to ==.

1

Tak ten kod możesz w zasadzie umieścić tam gdzie chcesz tylko żeby był najpóźniej na równi z przyciskami na listwie czasowej.

Zmienna globalną możesz zainicjować gdzie chcesz, jednak zanim zostanie użyta lub po prostu przy pierwszym użyciu :)

0

tomepaw lub ktokolwiek inny - mam taką uprzejmą prośbę jeszcze, bo chciałem przetestować czy działa.
Postępowałem wg wskazówek, ale jakoś nie wyszło, sam kod nie zwraca błędu, po prostu nie działa.
W sumie cały kod, wrzucony jest bezpośrednio na scenę główną do 1 klatki.

Zamieszczam plik .fla. z komentarzami co jest czym. Mógłbyś zerknąć i powiedzieć co jest źle?
Albo poprawić i wstawić (to już bym się raczej zorientował w czym rzecz).

Wstawiam jako. rar, gdyż .fla nie jest akceptowany.

Mam jeszcze jedno pytanie. Chciałbym wyłączyć pole tekstowe po naciśnięciu przycisku, nie zrobić by było przezroczyste tylko je dezaktywować, nie wiem nawet czy tak można. Dokładniej chodzi o miejsce:

nazwa_przycisku.onRelease = function() {
switch(tmp)
{
case 1:
//jakaś akcja
case 2:
//jakaś akcja
default:
//jakaś akcja
//itd...
}
}

W miejscu '//jakaś akcja' na początku chciałem zrobić _root.gotoAndStop("a").
No bo chce się odpływać do etykiety klatki na której jest pole tekstowe, i chodzi o to, że tymi przyciskami chce zmieniać pola tekstowe, które są na sobie i zamiast nieelegancko wielu przesunięć w klatkach, by się nie nakładały na siebie te pola tekstowe to wymyśliłem, że wszystkie byłby w tej samej kolumnie, czyli niby się nakładają, ale po wybraniu jednego przycisku, wszystkie prócz jednego pola tekstowego się dezaktywują, a aktywuje się to jedno odpowiadające. Czyli w danym case wyglądałoby to mniej więcej tak (przedstawiając w meta kodzie):

case1:
{
   dezaktywuj pole tekstowe 2;
   ...
   dezaktywuj pole tekstowe n;
   aktywuj pole tekstowe 1;
   _root.gotoAndStop("a")
}

Z góry dziękuje za pomoc i przepraszam za kłopot, związany z moimi zawiłymi pomysłami. Ale priorytetowe dla mnie jest zrealizowanie pierwotnej idei, to już jest taki miły i estetyczny dodatek.

1

A więc tak:
Aby odwołać się z poziomu AS do jakiegoś MovieClipu, czy też Buttona należy nadać mu instancję. Z tymi polami tekstowymi to proponowałbym Ci wsadzić je w jeden MovieClip i po prostu machać klatkami w tymże MC, inaczej po prostu one najdą na siebie i użytkownik będzie mógł coś wklepać jedynie do jednego z nich:

instancja_przycisku_majacego_aktywowac_pole_tekstowe.onRelease = function() {
MC_z_przyciskami.gotoAndPlay("etykieta_klatki");
}

Myślę, że wiesz, że _parent odwołuje o poziom niżej, a _root do głównej listwy czasowej? :P

Możesz też zagnieżdżać sporo MovieClipów w sobie, wówczas odwołanie się do danego z głównej listwy czasowej wygląda tak:
instancja_MC1.instancja_MC2.instancja_MC3.(...).JAKAS_AKCJA

Zamieszczam zmodyfikowany plik .fla, który działa już okej, w komentarzach starałem się wytłumaczyć wszystko jak najprościej (możliwe, że dla Ciebie nawet za prosto ;)) i dałem Ci drobną wskazówkę gdzie umieszczać Acionscipt, do której możesz, ale nie musisz się zastosować. Mam nadzieję, że już wszystkie Twoje wątpliwości są rozwiązane, jeżeli jednak nie - pisz, postaram się pomóc :)

Mogę wiedzieć dlaczego starasz uczyć się już nieco starego AS2? Sam powoli się uczę AS3 (jednak nad tym stawiam C++ i Qt, ale to już taki Off-topic), składnia podobna a szybkość i możliwości o wiele większe, jednak w AS3 już Ci nie pomogę ;P Swoją drogą dokumentacja Adobe o AS3 jest bardzo dobra i w dodatku po Polsku.

[email protected]:
Chyba pobiłem rekord literówek w jednym poście :|

0

SUPER!
Na prawdę bardzo, bardzo dziękuje. Udało mi się to zrobić tak jak chciałem. :)

Prawdę mówiąc tego _root używałem raczej dość intuicyjnie, dopiero teraz, gdy przeczytałem mam tą świadomość.

Tak samo nie miałem świadomości co uwzględniania w kodzie zagnieżdżania i nie wiedziałem jak ważne jest nadawanie instancji, co było widać w moim 'teście' heh.

Poszukując informacji zauważyłem, że rzeczywiście jest sporo opisów AS 3.0 i to dość solidnych. Ale prawdę powiedziawszy Twoja pomoc okazała się cenniejsza niż naście przejrzanych stron.

Kiedyś jako projekt zaliczeniowy z jednych zajęć mieliśmy zrobić prostą stronkę i znalazłem sobie tutorial do zrobienia animowanego przycisku, ale nie mogłem jakbym próbował wpisać kod bezpośrednio dla przycisku. I po wielu godzinach doszedłem do tego, że to w AS 2.0 się da. Teraz już wiem jak to zrobić bez kodu bezpośrednio na przycisku. No i ostatnio pomyślałem sobie, że warto podszkolić się w tej dziedzinie, a nie realizować wymagane minimum tylko umieć coś więcej. Więc zacząłem sobie udoskonalać tą stronkę poprzez realizowanie swoich pomysłów. :)

W sumie jeszcze jeden problem mam, wymyśliłem, że wstawię player i użyłem do jego wygenerowania programu Aleo Flash MP3 Player Builder, ale gdy dodaje do Biblioteki i chce wrzucić na scenę to jest po prostu biała Grafika, obiekt jest jakby pusty. Wrzucę tutaj ten plik, byłbym wdzięczny, gdybyś tylko zobaczył czy u Ciebie tak samo zachowuje się. I przepraszam jeśli nadużywam Twojej pomocy. :)
Pliki muzyczne są ucięte w połowie bo wersja Trial tylko 50% konwertuj. A jako, że się bawię/uczę, to nie potrzebuj całości.

Jeszcze raz dziękuje za pomoc.

1

Pliki .swf do sceny ładuje się nieco inaczej :)
Po prostu tworzysz MovieClip (najlepiej wymiarów czytywanego pliku) nadajesz mu instancję i ładujesz za pomocą AS:
instancja.loadMovie ("player10.swf");
Zakładam, że player jest w tym samym katalogu co animacja, jednak gdyby był w innym, wówczas:
instancja.loadMovie ("nazwa_katalogu/player10.swf");

0

Jeszcze raz bardzo dziękuje za pomoc.
Wszystko działa!

1 użytkowników online, w tym zalogowanych: 0, gości: 1