Воспроизвести случайный FLV из 5 FLV

Мне нужна ваша помощь с Actionscipt3.0. Если честно, я действительно новичок во флэш-памяти. Я больше люблю 3D-дизайнер, поэтому не использую flash;) В настоящее время мне нужно создать веб-сайт, на котором некоторые видео должны воспроизводиться автоматически.

Когда пользователь открывает URL-адрес и попадает на страницу, должно воспроизводиться случайное видео из пяти. Когда видео будет закончено, он должен выбрать другое видео из всего 5 видео.

Итак, пример: следует выбрать одно видео из 5 видео. Воспроизведите его, затем он должен выбрать 1 видео из 4 видео, затем он должен выбрать 1 видео из 3 видео ... и так далее. И после того, как все 5 сыграны, процесс должен повториться.

Я надеюсь, что кто-то здесь может мне помочь с этим ... У меня есть софар ...

файлы var: Array = ["Sz01Puppet.flv", "Sz02Puppet.flv", "Sz03Puppet.flv", "Sz04Puppet.flv", "Sz05Puppet.flv"]; var randomFiles: Array = [];

var i: int; for (i = 0; i randomFiles.push (files [Math.floor (Math.random () * files.length)]);}

трассировка (randomFiles);

Но это никак не работает ..

Было бы здорово, если бы кто-нибудь мог мне помочь


person arvidurs    schedule 15.08.2011    source источник
comment
ваша логика выглядит нормально, но вам также нужно удалить элемент из массива файлов, иначе вы получите дубликаты, а цикл for выглядит немного неправильно ... 1 мин.   -  person George Profenza    schedule 15.08.2011


Ответы (3)


Ага, вы почти у цели. Вот как должен был быть написан цикл for:

var files:Array = [ "Sz01Puppet.flv", "Sz02Puppet.flv", "Sz03Puppet.flv", "Sz04Puppet.flv", "Sz05Puppet.flv" ]; var randomFiles:Array = [];
var i:int; 
for(i = 0 ; i < files.length; i++) randomFiles.push(files[Math.floor(Math.random() * files.length)]);
trace(randomFiles);

Тем не менее, вы отмечаете удаление элементов из массива, поэтому у вас будут дубликаты.

Вот пример:

var files:Array = [ "Sz01Puppet.flv", "Sz02Puppet.flv", "Sz03Puppet.flv", "Sz04Puppet.flv", "Sz05Puppet.flv" ];
var shuffledFiles:Array = shuffleArray(files);
//quick test
var testTimer:Timer = new Timer(1000);
testTimer.addEventListener(TimerEvent.TIMER,updateFile);
testTimer.start();

function updateFile(event:TimerEvent):void{
    if(shuffledFiles.length == 0) shuffledFiles = shuffleArray(files);//all files played, repeat process
    trace('play file',shuffledFiles[0]);
    shuffledFiles.shift();
}
function shuffleArray(source:Array,clone:Boolean = true):Array {
    var output:Array = [];
    var input:Array = clone ? [].concat(source) : source;//clone ? preserve orignal items by making a copy for shuffling, or not
    while(input.length) output.push(input.splice(int(Math.random() * input.length-1),1)[0]);
    return output;
}

Удачи

person George Profenza    schedule 15.08.2011
comment
Спасибо, Джордж! Вроде работает. Я получаю бесконечный цикл, чего я и хочу. Теперь у меня есть 5 FLV, но как мне заставить скрипт действий работать и вывести файл, который воспроизводит все 5 FLV в случайном порядке? Что я могу реализовать на своем веб-сайте? - person arvidurs; 16.08.2011
comment
Еще одна вещь, которая могла бы мне помочь .. Должен ли я поставить свои 5 флэтов на сцену, или они могут остаться в библиотеке? У меня почти нет опыта работы со вспышкой, так что вы, ребята, действительно мне очень помогли. @Отметка - person arvidurs; 16.08.2011
comment
@arvidurs Не беспокойтесь! Я полагаю, что под воспроизведением всех 5 файлов вы имеете в виду последовательно, а не одновременно :) Это зависит от вашего веб-сайта и его настроек. Я бы сказал, что самый простой способ - это с использованием FLVPlayback. Получив FLVPlayback с именем экземпляра и нужной оболочкой, установите путь к flv в качестве источника (yourFLVPlayer.source = yourRandomFLVPath). Если ваш сайт в основном html, то, возможно, стоит проверить SWFObject / FlashVars / ExternalInterface, чтобы вы могли контролировать видео без постоянной перекомпиляции swf. - person George Profenza; 16.08.2011
comment
Могу я добавить вас в скайп? Они должны играть один за другим. (так выглядит страница сейчас music-puppets.com, но мне нужны все 5 видео с ними играть в случайном порядке друг за другом.) - person arvidurs; 16.08.2011
comment
Хорошо, у меня есть FLVPlayback на сцене. Должен ли я добавить на вкладке «Источник» Sz01Puppet.flv, создать новый FLVPlayback, добавить Sz02Puppet.flv и так далее? Или какой файл я должен добавить во вкладку источника в FLVPlayback? что мне написать в = clone? код? - person arvidurs; 16.08.2011

Вы можете использовать функцию Array.sort () для случайной сортировки.

// random sort function
function shuffle(a:*, b:*):int 
{
    return int(Math.random() * 2) - 1;
}

var files:Array = ["Sz01Puppet.flv", "Sz02Puppet.flv", "Sz03Puppet.flv", "Sz04Puppet.flv", "Sz05Puppet.flv"];

var randomFiles:Array = files.sort(shuffle); // get a new instance of the array which is sorted

trace(randomFiles);
person Mark Knol    schedule 15.08.2011

Вот один из способов сделать это.

person kolufild    schedule 15.08.2011
comment
Ух ты! Спасибо за вашу помощь! Я буду тестировать его через несколько часов. И отвечу вам :) Очень рада вашей поддержке .. - person arvidurs; 16.08.2011