Autor Zpráva
Ladislav
Profil
Dobrý den, můžete mi pomoci?
Pro potřeby jedné školy připravuju jednoduché výukové CD.
V jednom framu se bude řešit jeden úkol. Po splnění úkolu se žákovi otevře další úkol v dalším framu. Ale:

1) úkoly by se neměly zobrazovat postupně, ale v náhodném sledu (aby děcka neřešili úkoly pořád ve stejném pořadí)

2) aby bylo v patřičném formuláři možné vybrat si úroveň či lekci - žák si vybere např. 1. - 3. lekci, což budou úkoly na framech 2 - 31 (a vybrané framy by se přepínaly opět v náhodném pořadí)

Pro mě neřešitelný oříšek, poradíte?
Dredie
Profil *
ladislav: vecer na to mrknu, jestli to do te doby nekdo nevyresi :)
Dredie
Profil *
takze jak jsem slibil:

//definujes lekci1 a lekci2 (ve finale jich muzes mit kolik chces) a vyslednou lekci ktera se sklada z kombinaci libovolneho poctu jinych
lekci - jedna se o pole prommenych, ktere se pouzije pro ulozeni cisel snimku, na kterych zacina a konci urcita lekce

var lekce1:Array = new Array();
var lekce2:Array = new Array();
var vyslednaLekce:Array = new Array();

//definujes zacatek a konec lekce1 (framy)

var lekce1start:Number = 1;
var lekce1konec:Number = 10;


//definujes zacatek a konec lekce 2

var lekce2start:Number = 11;
var lekce2konec:Number = 27;


//definujes, na kolikatou otazku se momentalne zak diva

var momentalniOtazka:Number = 0;

//funkce, ktera do lekce nakope cisla podle toho jaky jim definujes zacatk a konec, cislo lekce davas jako parametr funkce

function sestrojLekci(cisloLekce:Number) {
var startLekce:Number = eval("lekce" + cisloLekce + "start");
var konecLekce:Number = eval("lekce" + cisloLekce + "konec")
for(var i:Number = startLekce; i < konecLekce+1; i++) {
var jmenoLekce = eval("lekce"+cisloLekce);
jmenoLekce.push(i);
}
}

//funkce ktera nejprve spoji momentalne dve lekce (toto je jen pro ilustraci, samozrejme ze nakonec tam budes mit parametru presne tolik, kolik budes mit lekci a jejich spojeni dosahnes tak, ze parametr lekceC, lekceD atp. pripojis za cast skriptu lekceB -> lekceA.concat(lekceB, lekceC, lekceD....., lekceN);). Samozrejme nevadi, pokud budes volat funkci, ktera zada napr. 20 parametru pouze s parametry 3mi, nevyplnene se proste ignoruji (protoze jmaji hodnotu undefined... aspon myslim :),

function spojArozhodLekce(lekceA, lekceB) {
var docasnePoleZdroj:Array = lekceA.concat(lekceB);
for(i=0; i<docasnePoleZdroj.length; i++) {
var nahodnyVyber:Number = random(docasnePoleZdroj.length);
vyslednaLekce.push(docasnePoleZdroj[nahodnyVyber]);
docasnePoleZdroj.splice(nahodnyVyber,1);
i--;
}

}

//funkce pro zobrazovani jednotlivych snimku podle jejich poradi v poli vyslednaLekce

function dalsiOtazka() {
if(momentalniOtazka<vyslednaLekce.length) {
otazkyMC.gotoAndStop(vyslednaLekce[momentalniOtazka]);
momentalniOtazka++;
}
}

//volani funkce dalsiOtazka po stisknuti tlacitka

this.meTlacitko.onRelease = function() {
dalsiOtazka();
}

//zavolani funkce sestrojLekci, pokud bys mel 20 lekci, zavolas ji 20x (pouzil bych pak for smycku, tady to neni potreba)

sestrojLekci(1);
sestrojLekci(2);

//volani teto funkce bude samozrejme vypadat jinak - podle toho ktere lekce zak vybere. Parametry tudiz budou teto funkci predany jinou funkci, ktera bude zjistovat, ktere lekce zak vybral (napr. pomoci komponentu - checkBox). Momentalne funkce pouze spoji a zprehazi lekci1 a lekci2 (jedine dve lekce, ktere tu jsou)

spojArozhodLekce(lekce1, lekce2);

//nastavi zobrazeni klipu s otazkami na frame odpovidajici prvnimu cislu v poli vyslednaLekce, pokud by to tu nebylo, zak by jako prvni videl vzdy prvni frame otazkyMC

this.otazkyMC.gotoAndStop(vyslednaLekce[0]);


Kod jsem testoval pomoci trace a fungoval. Jeho vyhoda je v tom, ze muzes zvolit treba lekce 1-3, 5-6, 8, 10 a cisla snimku se pripoji a prehazou do vysledne lekce automaticky, nicmene urcite by se to dal poresit lepe - tot otazka pro ostatni :)

D.
Ladislav
Profil
Díky, řek bych, že je to přesně to, co jsem potřeboval. S vaším návodem bych to mohl zvládnout.
Chvostik
Profil *
Nevedel by mi niekto povedat ako otvorit znie prikaz na otvorenie URL v novom okne, napr.
s rozmermy 800x600px???
Toto téma je uzamčeno. Odpověď nelze zaslat.

0