SWiSH Forum
Forum użytkowników programów SWiSH

SWiSH Max - losowa kolejność scen w danej sekwencji

patros - Czw 12 Lis, 2009 10:59
Temat postu: losowa kolejność scen w danej sekwencji
Witam,
próbuje zrobić skrypt wyświetlający reklamy (każda reklama to osobna scena). Znalazłem przykład jak za pomocą Math.random losować poszczególne sceny. Jednak odbywa się to za każdym razem po zakończonej danej scenie:
Kod:
onSelfEvent (load) {
 value = Math.floor(Math.random()*50);
 value=Math.ceil(value/10);  //this gives a better randomisation of 1,2,3,4 or 5.
 
  if (value==1) {
      gotoSceneAndPlay("Reklama_1",1);
  }
  if (value==2) {
      gotoSceneAndPlay("Reklama_2",1);
  }
  if (value==3) {
      gotoSceneAndPlay("Reklama_3",1);
  }
  if (value==4) {
      gotoSceneAndPlay("Reklama_4",1);
  }
  if (value==5) {
      gotoSceneAndPlay("Reklama_5",1);
  }
}
onFrame (151) {
    gotoSceneAndPlay("Losowanie",1);
}

i kod wykonywany na zakończenie danej sceny (każda scena zajmuje 151 klatek):
Kod:
onFrame (151) {
    gotoSceneAndPlay("Losowanie",1);
    }

Zamieszczony powyżej kod losuje za każdym razem (pojedynczo) następną scenę i uzyskuję efekt np. 1,4,4,1,4 całość działa prawidłowo, jednak chciałbym osiągnąć coś takiego:
w scenie "Losowanie" losowana jest sekwencja Reklam np. 3,5,2,4,1 i reklamy wyświetlają się w takiej kolejności ("w kółko") - oczywiście do następnego przeładowania flash i wygenerowania nowej sekwencji.
Mam nadzieję, że za bardzo nie pokręciłem z opisem i wszystko jest czytelne.
Będę wdzięczny za wszelkie podpowiedzi, wskazówki.

Pozdr.

mielu - Czw 12 Lis, 2009 13:00

trzeba sprawdzać co zostało wylosowane przykład losowań lotto http://swish.wodip.opole....highlight=lotto
patros - Czw 12 Lis, 2009 13:19

Dzięki za szybka odpowiedź. Niestety nie mogę przetestować tego przykładu. Dostaję komunikat:

Oczekiwano zmiennej w skrypcie:
Scene_1::onFrame (2)
Scene_1, linia 8: "losowana"+k=losowane_liczby[los];

mielu - Czw 12 Lis, 2009 13:52

dawno dawno temu to działało a teraz z drobną poprawką też działa
Kod:
onFrame (1) {
    stop();
}
onFrame (2) {
    losowane_liczby=new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49);
    for (k=1; k<=6; k++) {
        los=Math.randomInt(losowane_liczby.length);
        eval("losowana"+k)=losowane_liczby[los];
        losowane_liczby[los]=0;
        losowane_liczby.sort();
        losowane_liczby.shift();
        trace(losowane_liczby);
    }
 myNumbers = new  Array (losowana1,losowana2,losowana3,losowana4,losowana5,losowana6);
    myNumbers.sort();
 
     for (k=1; k<=6; k++) {
         eval("losowana"+k)=myNumbers.shift();
       
                        }
}

zamień kod

patros - Czw 12 Lis, 2009 17:07

Działa. Zmieniłem sobie ilość liczb do 5 (tyle ma być scen) w tablicy i pętli.
Teraz pozostało mi wyświetlać kolejne sceny wg wylosowanej kolejności... i tu się zastanawiam czy zagnieżdżać instrukcje warunkowe if (chyba "najprostszy" i najmniej profesjonalny sposób) czy może w AS jest rozwiązanie lepiej wykonujące to zadanie?

[ Dodano: Nie 20 Gru, 2009 17:09 ]
Witam.
Nie tworzę nowego tematu (tylko odgrzewam stary) - znów się zabrałem za losowanie kolejności reklam i po raz kolejny poległem. W stosunku do pierwszego pomysłu zmieniłem to, że każda reklama będzie w osobnym pliku (a nie scenie-chyba tak lepiej). Wykorzystałem wskazówki od mielu i udało mi się stworzyć coś co losuje liczby od 1 do 5 (żadna się nie powtarza) jednak zawsze wyświetlana jest reklama odpowiadająca ostatniej wylosowanej liczbie.
Nie wiem, jak zrobić aby wykonywana pętla zatrzymywała się na czas wyświetlania kolejnych reklam i po wyświetleniu ostatniej rozpoczynała wyświetlanie od nowa.

Załączam wszystkie pliki.


Powered by phpBB modified by Przemo © 2003 phpBB Group