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 :P
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)

Powered by phpBB modified by Przemo © 2003 phpBB Group