Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Случайный вызов мувиклипов (http://www.flasher.ru/forum/showthread.php?t=130782)

flashowl 05.10.2009 17:28

Случайный вызов мувиклипов
 
Делаю тест во флеше. 50 вопросов. Надо сделать так, чтобы случайным образом по очереди загрузилось 15 из 50, причём те, которые появлялись раньше, не появлялись. Не подскажете, как сделать?:)

woland24 05.10.2009 17:33

В каком виде и где хранятся вопросы?

MaskiShow 05.10.2009 17:45

Недавно такое же надо было делать. В итоге для меня оптимальным был вариант ниже. Если вам единовременно надо вывести X разных вопросов из Y, можно сделать примерно так:

Код:

    max = 15; all = 50
array = new Array (max) // массив с номерами вопросов

    u = 0
    while (u == 0) {
        for (i = 1; i <= max; i++) {
            array[i] = Math.randomInt(all) + 1 // случайный номер вопроса
            }
        u = array.sort(Array.RETURNINDEXEDARRAY | Array.UNIQUESORT)
    }

Здесь тупо забиваем массив случайными номерами, и если есть совпадения - переделываем. Отношение Y/X должно быть не менее 4-5 для хорошей работы скрипта, добавьте еще вопросов или уменьшите до 10 количество выводимых.

true11 05.10.2009 17:51

Мм можно сделать так:
Код AS1/AS2:

var questions = new Array('Вопрос 1', 'Вопрос 2', 'Третий вопрос','Четвертый вопрос','Пятый вопрос','шестой вопрос'); // Массив с вопросами
var questions_asked:Array; // Массив, в котором будем хранить либо 0(не спрашивался) либо 1(спрашивался).

Далее, приравниваем массив questions_asked к questions по длине и все его значения приравниваем к нулю. Т.е. у нас еще ни один вопрос ни спрашивался.

Код AS1/AS2:

for(i=0;i<questions.length;i++){
        questions_asked[i]=0;
        }

Далее, делаем функцию, которая считывает все единички в массиве questions_asked(если они есть) и возвращает массив:

Код AS1/AS2:

function getRestrict():Array{
        var restricted:Array;
        var count:Number=0;
        for(i=0;i<questions.length;i++){
        if(questions_asked[i] == 1){
                count++;restricted[count]=i;
                }
        }
        return restricted;
}

далее, рандомим число от 0 до questions.length, кроме тех, что возвращает функция getRestrict().
И задаем вопрос из массива questions[№вопроса]

Ммм.. ну идея примерно такая :)

lumaca 05.10.2009 18:31

Можно проще: создать массив вопросов и выбрав один сразу удалять его из массива.

flashowl 06.10.2009 17:20

Вопросы хранятся в библиотеке в виде клипов. Надо, чтобы вызывался один из них и так 15 раз. Причём клипы не должны повторяться.

mooncar 06.10.2009 17:26

А как вы их вообще вызываете - аттачите, надо полагать?
Ну сделаете тогда по любой из вышеприведенных схем, просто в массив загоните имена ссылок на ваши мувики в библиотеке.
И вообще, нужно сразу правильно вопросы задавать - для экономии чужого и своего времени.

flashowl 06.10.2009 17:38

Всё-таки я не понял, как сделать, чтобы клипы с вопросами выводились на раб. поле

woland24 06.10.2009 17:46

у тебя в именах клипов есть числа? Если нет то допиши. Забивай массив 15 числами одним из способов описаных выше, а потом(или там же при записи в массив) делай клип видимым(до этого все клипы сделать невидимыми) таким способом
Код AS1/AS2:

path_to_clip["clips_name" + num]._visible = true;

где num - это число из массива номеров вопросов

true11 06.10.2009 17:48

Код AS1/AS2:

randNum=4; // твое рандомное число
this.attachMovie("ClipName"+randNum, "newClipName", this.getNextHighestDepth(), {_x:newX, _y:newY});

где ClipName - имя клипа в библиотеке(export for ActionScript)
newClipName - имя приаттаченного клипа(по этому имени к нему потом можно будет обращаться)
newX - в какой _x его поместить, newY - координата _y

когда человек ответил - удаляй клип - removeMovieClip. и не будет лишних клипов :)


Часовой пояс GMT +4, время: 20:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.