|
SWiSH Forum Forum użytkowników programów SWiSH |
 |
SWiSH Max - kolejność losowa
Piotrek - Czw 28 Sty, 2010 16:44 Temat postu: kolejność losowa Witam,
Kłopot mam taki, że potrzebuje odtwarzać losowo animacje zawarte w movie clip. Mam kilka movie clipów i są w nich proste animacje. Jak zmusić żeby w pierwszej klatce sceny wybierany był jeden z nich.
Proszę o pomoc
Januszr - Czw 28 Sty, 2010 18:56
Dla nazw kolejnych animacji twoj_klip1 ... twoj_klip9:
do sceny:
Kod: | onFrame (1) {
value = random(9)
if (value==0)
{
twoj_klip1.gotoAndPlay(2);
}
if (value==1)
{
twoj_klip2.gotoAndPlay(2);
}
if (value==2)
{
twoj_klip3.gotoAndPlay(2);
}
if (value==3)
{
twoj_klip4.gotoAndPlay(2);
}
if (value==4)
{
twoj_klip5.gotoAndPlay(2);
}
if (value==5)
{
twoj_klip6.gotoAndPlay(2);
}
if (value==6)
{
twoj_klip7.gotoAndPlay(2);
}
if (value==7)
{
twoj_klip8.gotoAndPlay(2);
}
if (value==8)
{
twoj_klip9.gotoAndPlay(2);
}}
onFrame (3) {
stop();
} |
Animacje w klipach powinny mieć stop i remove wszystkich obiektów na pierwszej klatce a powinny zaczynać się od klatki 2
bez twojego *.swi nie pomogę bardziej
Zdrówko!
eden - Czw 28 Sty, 2010 20:32
Pozwole sobie uzupełnic nieco rozwiązanie Janusza, dla ciekawych.
Jesli już chcesz sprawdzać co tam sie wylosowało, to słuzy do tego celu konstrukcja switch
losuj = Math.floor(Math.random()*9);
Kod: | switch (losuj) {
case 0:
klip0.gotoAndPlay(2);
break ;
case 1:
klip1.gotoAndPlay(2);
break ;
case 2:
klip2.gotoAndPlay(2);
break ;
case 3:
klip3.gotoAndPlay(2);
break ;
case 4:
klip4.gotoAndPlay(2);
break ;
case 5:
klip5.gotoAndPlay(2);
break ;
case 6:
klip6.gotoAndPlay(2);
break ;
case 7:
klip7.gotoAndPlay(2);
break ;
case 8:
klip8.gotoAndPlay(2);
break ;
default:
trace ("Jesli to widzisz, to koniec swiata") ;
} |
zrezygnował bym tez z random(). (mimo ze oczywiście działa). Poniżej powód.
random() - jest funkcją globalną i została zdeprecjonowana od flash 8, Jako, że wtedy wszystko stało sie bardziej obiektowe. Nowy random został dodany jako metoda klasy math, tak jak tego uzyłem powyżej. math.random niedziała w taki sam sposob jak random() czego można by było sie spodziewać, zamiast zwracać liczby całkowite uznano że będzie bardziej uniwersalnie gdy będzie zwracał liczby zmiennoprzecinkowe od 0 do 1. Dlatego idealnym ekwiwalentem dla
random(9) jest Math.floor(Math.random()*9);
Do rzeczy, random() może pewnego dnia poprostu przestać istnieć jako funkcja w zasobach flashplayera i przestanie poprostu działać zmuszając nas do edytowania jakiegos tam swi sprzed miesięcy albo gorzej.
Powyzszy przykład ze switch() jest czysto akademicki, ta składnia najlepiej nadaje sie do switchowania wartości stringowych. W zyciowych warunkach uzył bym jednej lini do odpalenia losowego klipa.
Kod: | this["klip"+losuj].gotoAndPlay(2) |
Piotrek - Pią 29 Sty, 2010 06:51
Obydwu kolegom dziękuję za pomoc i szybką reakcję.
A tak na marginesie nie wiecie może co adobe nawywijało z ostatnią wtyczką do flasha?
A może ja coś robie nie tak, albo soft na dwóch pc mi się rozleciał .
Akcja jest taka, że robie movie clip w pierwszej klatce stop, i jedyny obiekt w niej jaki jest remove, w drugiej klatce daje najprostszy fade in. W pierwszej klatce sceny daje on frame 1 go to and play movie clip frame 2... efekt taki, że odpala się movie clip aczkolwiek zostaje animacja w 2 klatce i nie chce dalej. W przypadku w którym pomogliście obszedłem sprawę poprzez visible. Ale tak jeszcze podaje plika z tym co się dzieje z pytaniem czy u Was tak samo?
eden - Pią 29 Sty, 2010 15:12
to dość popularny problem, jego przyczyn jest kilka. W twoim przypadku jest to zbyt szybkie wywołanie gotoandPlay. Jak dasz to na klatke 2 a na 3 dasz stop; to pewnie zadziała. Dokładnie niewiem czemu tak się dzieje, prawdopodobnie ma to związek z budowaniem obiektów podczas runtime-u)
|
|