PDA

Просмотр полной версии : Динамический Load/UnLoad movies


Александр-HIMик
09.01.2004, 00:24
Ситуация такая: есть главный мув, который загружает в себя другой мувик из папки. Типа так.
movnum = random(9); // возьмем к примеру 9 мувиков с именами sound0.swf-sound8.swf
loadMovieNum("sound/sound"+movnum+".swf", 1);

Я успешно использовал такой ход для загрузки разнообразных аудио-подложек для одного из своих проектов. Теперь нужно нечно большее и вот тут то я и встрял.
В каждом загружаемом мувике есть звуковой фрагмент, который проигрывается один-два раза за весь мувик. На этом мувик исчерпан. Задача в следующем: сделать так, чтобы после "рандомной" загрузки мувика и после его воспроизведения (для каждого мувика время воспроизведения t=10 sec), он выгружался и опять же загружался рандомом следующий мувик. Картина получается такая: заходит пользователь на сайт, а там всякие шорохи, скрежет, шепот.. И желательно сделать Action для главного мувика, который бы останавливал этот процесс бесконечной загрузки. Мало ли что. %))

Штрек
09.01.2004, 01:01
Ну setInterval.
Что не подходит?

Александр-HIMик
10.01.2004, 16:53
Если рассмотреть подробнее:
1й кадр. Определяем рандомом номер, формируем имя файла с мувиком. Загружаем его. Если файл загружен -> кадр2.
2й кадр. Проигрываем мувик. Ставим SetInterval = t, именно столько времени положено для проигрывания. Определяем функцию, например Go1st, которая бы выгружала мувик и переходила на первый кадр. Вызываем SetInterval(t,Go1st);
Вроде так.
Теперь как бы вставить условие, чтобы можно было бы вырубить весь этот процесс?

sergwizard
10.01.2004, 18:44
В главном мувике пишем такой код.

snd = ["sound0.swf","sound1.swf","sound2.swf","sound3.swf","sound4.swf","sound5.swf","sound6.swf","sound7.swf","sound8.swf"]
for(i=0;i<9;i++){
this.createEmptyMovieClip("sound_mc"+i,i)
loadIt();
}
function loadIt(){
_root["sound_mc"+i].loadMovie("sound/"+snd[i]);
}
function playRand(){
num = random(9);
if(num!=numb){
stopAllSounds();
_root["sound_mc"+num].gotoAndStop(2);
_root["sound_mc"+numb].gotoAndStop(1);
numb=num;
}
}
function stopMusic(){
stopAllSounds();
clearInterval(m);
num=10;
}
m = setInterval(playRand, 10000);
btn.onRelease = function(){
pressed = (pressed+1)%2;
pressed ? stopMusic() : m = setInterval(playRand, 10000);
pressed ? txt="play" : txt="stop";
}


Звуковые мувики делаешь по такому принципу: первый фрейм - пустой, с кодом stop();
2-фрейм с вложенным звуком и кодом stop();
Лучше смотри пример. Все звуковые мувики сделай по этому образцу.

Штрек
10.01.2004, 19:05
Всё это хорошо?!
Но зачем грузить всё сразу?
Зачем 9 мувиков для подгрузки?
Если надо, чтоб пока один воспр., другой грузился,
то может и 2,3 хватит?
Смотрю в полглаза, мож чего то и не увидел?
Извиняюсь. ;)

__i
10.01.2004, 19:06
таже проблема,грузим толпу swfок, они должны играть поочереди, но время их проигрывания определить невозвожно ???

sergwizard
10.01.2004, 20:02
2 Штрек. Для начала, вполне бы хватило и 2-3 мувиков, ты прав. Вот только бы ты еще подсказал, каких именно? Они же РЭМДОМНО должны проигрываться. :) Это раз. А два, - у тебя сначала будут постоянно возникать паузы между звуками: - функция вызвана а мувика еще нет. Чё делать? А время идет, и через 10 секунд опять вызов функции. Хило будет. Проверено уже.
2__i Если swf(шки) не музыкальные, а нормальные, то проблем вообще никаких нет. В конце каждого мувика обнуляем переменную. В начале мувика приравниваем к true. В основном проверяем. Нет переменной, - грузим новый, есть переменная, - ждемс, когда закончится.
Ну, а если это музыкальные мувики, - подумать надо. Я так, влет не готов ответить.

sergwizard
10.01.2004, 21:04
2__i
Есть такое - "Sound.onSoundComplete". Flash проверяет, закончилась ли музыка. Если да, то можно вызывать следующую функцию.
В подгружаемых музыкальных файлах пишем типа такого:

mySound = new Sound();
mySound.attachSound("name");
mySound.start();
mySound.onSoundComplete = _root.playNew;


А в главном прописываем функцию playNew();
Вот и все.

Александр-HIMик
11.01.2004, 00:52
Теперь бы все это в одно свести. Я весь вечер долбился, что-то своего ничего не вышло. Если я вызываю _level1.play();, то stop(); находящийся в загруженном на _level1 мувике будет распознан и остановит play в нужном месте? А как вызвать _level1.play(); сразу же при переходе на нужный кадр?
А unloadMovie/unloadMovieNum() совсем нафиг не нужен?
И он что, будет все swf сразу грузить? А если я не поленюсь и сделаю их 50 и более. Он не лопнет? %)
Паузы между звуками, в смысле непрерывное вопроизведение всех мувов? Вообще-то паузы должны быть, желательно оговорить какое-то стандартное время t, за которое бы подгружался рандомом выбранный следующий мув. со звуком.

sergwizard
11.01.2004, 01:55
желательно оговорить какое-то стандартное время t, за которое бы подгружался рандомом выбранный следующий мув. со звуком.

Оговорить? С кем??? Или ты думаешь, что можно заранее оговорить скорость подключения? Вообще, создается впечатление, что ты разговариваешь сам с собой, бредишь то есть. Вот это что значит?
Если я вызываю _level1.play();, то stop(); находящийся в загруженном на _level1 мувике будет распознан и остановит play в нужном месте? А как вызвать _level1.play(); сразу же при переходе на нужный кадр?

И он что, будет все swf сразу грузить? А если я не поленюсь и сделаю их 50 и более. Он не лопнет? %)

Поверь мне, - не лопнет. Flash прощает достаточно много глупостей. Вот только я сомневаюсь, что посетителю твоего сайта будет интересны эти 50 звуков. Тем более рэмдомно звучащие. 50 мувиков с 10 секундным звучанием – это порядка полутора–двух мегабайтов. И больше 8 минут звучания. Даже если твой сайт безумно оригинальный и интересный, и посетитель не сможет оторваться от него больше десяти минут, то все равно он устанет от такой какофонии и выключит звук после первой минуты. Я, честно говоря, не очень понимаю, зачем тебе и эти 9 рэмдомных мувиков.
Я весь вечер долбился, что-то своего ничего не вышло.
А вот это уже не бред, - очень похоже на правду.
Совет: приступая к чему-либо, сначала продумай, что ты хочешь, и как это будет выглядеть. Потом – можно ли это сделать. И только потом – КАК это сделать.
Удачи.

Александр-HIMик
11.01.2004, 18:38
Оригинал написал(а) sergwizard

Оговорить? С кем??? Или ты думаешь, что можно заранее оговорить скорость подключения?
Можно ведь прелоадер для загружаемых мувиков приспособить.. если уж на то пошло.
Оригинал написал(а) sergwizard

Вообще, создается впечатление, что ты разговариваешь сам с собой, бредишь то есть. Вот это что значит?

Я просто рассуждаю, и пытаюсь узнать с вашей помощью, правильны ли мои рассуждения.

Время звучания небольшое - не более 4х секунд. Я действительно не хочу перегружать посетителя большим количеством звуковых эффектов, но все-таки изначально была идея о максимальном их разнообразии.
На словах все было ужасно просто. При переходе к более подробной реализации все стало более туманно и расплывчато. Наброски в файле.

Вот то, что я называю последним моим безобразием, потому как ничего не получается хорошего их этого. Комментарии внутри файла. Может вы поймете, что и как именно я хотел сделать.
Конечно, как вариант, для сайта подойдет описанное выше решение с несколькими мувами.
Но в данном случае, хочется понять, имеет ли решение описанная мной выше проблема, в таком виде, каком я его описал.

sergwizard
12.01.2004, 01:32
Можно ведь прелоадер для загружаемых мувиков приспособить.. если уж на то пошло.
Ну и что? Ну, приделаешь ты прелоадер..., от этого скорость не увеличится и не уменьшиится, и "стандартное время t, за которое бы подгружался рандомом" ты не установишь и не определишь.
Чем тебе не нравится вот этот вариант?

Александр-HIMик
12.01.2004, 19:05
Уважаемый sergwizard !
Твой вариант очень хорош. Однако хочется узнать, какие я допустил ошибки в своем коде.
Я тут в Мане ковырялся и вот еще один вариант: загружать mp3 - Sound.loadSound и запускать для загрузки нового SFX'а с помощью Sound.onSoundComplete. Можно ли так? Т.е. mp3 файл можно спокойно взять с сервака? Или это не для всех?