Просмотр полной версии : Привязка звука к событиям onEnerFrame
Smirnoff
08.09.2005, 16:50
Имеется мувик, вся анимация сделана полностью на as с помощью события onEnterFrame ...
Требуется вставить в разных местах разные звуковые фрагменты ..
Вставляю прямо в код с помощью attachSound, при этом естесственно при каждом переходе кадра звук вызывается снова и накладывется сам на себя ..
Что придумать ?
Привязать звук нужно именно к событиям, генерируемым скриптом ..
проверять, звучит ли этот звук? если да, то либо выключить его, чтобы только второй звучал, либо вообще не включать во второй раз.
Жень Шень
08.09.2005, 17:44
а такой вариант подойдет?
Smirnoff
08.09.2005, 18:16
Нормальный такой вариант ))
Правда я читал, что скрипты на клипы вешать не рекомендуется, то есть весь скрипт в одном месте писать лучше, на первом кадре первого слоя ...
а что это за параметры у start и stop ?
которые 0,1 и 1,0 ?
я так понял на них все и замешано ..
Жень Шень
09.09.2005, 11:13
Привет!
Если нельзя, а сильно хочется, то можно!
Это относительно скриптов.
И, второе, не в обиду сказаное - научись работать с ХЭЛПом
Смотри, что там написано
Sound.start
Доступность
Flash Player 5.
Синтаксис
mySound.start([secondOffset, loop])
Параметры
secondOffset Необязательный параметр, который позволит Вам начать проигрывание звука с указанной точки. Например, если у Вас есть 30-и секундный звук и Вы хотите, чтобы он начал играть посредине, укажите 15 для параметра secondOffset. Звук не остановиться на 15 секунд, а сразу начнет играть с 15-и секундной метки.
loop Необязательный параметр, который позволит Вам указать, сколько раз нужно проиграть звук в цикле.
Если б сразу прочитал, то не получил дубляжей звука.
Успехов. :)
Smirnoff
09.09.2005, 11:39
Ок, сажусь за изучение хелпа ..
А вообще вот мой скрипт ..
Почему не работает спрашивается ??
// Задаю переменную для проверки играет ли звук
var p:Boolean = false;
// Запускаю 1-й звук
var s1:Sound = new Sound(h);
s1.attachSound("s1");
s1.start();
// Пошло движение объекта
onEnterFrame = function () {
ob._x--;
// Когда объект доезжает до нужной точки останавливаю 1-й и запускаю 2-й, причем 2-й проверяю,
//чтоб не запускался еще раз если он уже играет
if (ob._x<100) {
s1.stop();
if (p=false) {
s2.attachSound("s2");
s2.start();
p = true;
} else {
s2.stop();
}
}
};
Smirnoff
09.09.2005, 11:48
Скопировал твой скрипт один в один - все равно если он вставляется до onEnterFrame воспроизводится один раз как и положено ..
А если после - зацикливается ..
Разница только в том, что у тебя оно висит на клипе (на событии onClipEvent (enterFrame)), а у меня на кадре ..
==================================================
Soun = new Sound();
Soun.attachSound("s1");
Soun.start();
onEnterFrame = function () {
ob._x--;
if (ob._x<100) {
Soun.attachSound("s2");
Soun.start();
}
};
Жень Шень
09.09.2005, 12:33
var p:Boolean = false;
// Запускаю 1-й звук
var s1:Sound = new Sound(h);
// лучше var s1:Sound = new Sound(); тип параметра должен быть Number
s1.attachSound("s1");
s1.start();
// Пошло движение объекта
onEnterFrame = function () {
ob._x--;
// Когда объект доезжает до нужной точки останавливаю 1-й и запускаю 2-й, причем 2-й проверяю,
//чтоб не запускался еще раз если он уже играет
if (ob._x<100) {
s1.stop();
if (p=false) {
//if (p==false) { оператор сравнения ==, а не присвоения =
var s2:Sound = new Sound(p);// Аналогично Sound(h);
s2.attachSound("s2");
s2.start();
p = true;
} else {
s2.stop();
}
}
};[/QUOTE]
А второй звук просто не успеет проиграться: р присвоена ИСТИНА при выполнении неравенства ob._x<100, а onEnterFrame сработает быстрее, чем проиграется второй звук. А тут его и стопишь: s2.stop();!!!
Далее, в s1.start(); нет параметров. Если звук короткий, то проиграет всего раз
Жень Шень
09.09.2005, 12:38
Скопировал твой скрипт один в один - все равно если он вставляется до onEnterFrame воспроизводится один раз как и положено ..
А если после - зацикливается ..
Кинь исходник - на досуге посмотрю
Smirnoff
09.09.2005, 13:04
Исходник бы дал с удовольствием, но в нем картинок 10 штук и весит он 6 метров ..
А без картинок скрипт не работает, на них все условия завязаны ..
Могу только дать полный текст скрипта ...
А второй звук просто не успеет проиграться: р присвоена ИСТИНА при выполнении неравенства ob._x<100, а onEnterFrame сработает быстрее, чем проиграется второй звук. А тут его и стопишь: s2.stop();!!!
И как же тогда можно условие поставить ?
Далее, в s1.start(); нет параметров. Если звук короткий, то проиграет всего раз
Тут все нормально, один раз он и должен проигрываться ...
Боюсь показаться назойливым, но ситуация у меня такая ..
Нужно сделать ролик именно сегодня, причем не важно что за код у него внутри - лишь бы работал ...
А разбирать код по косточкам, когда над душой стоят и требуют результата - не сахар ..
Так что если не трудно - объясни ..
Smirnoff
09.09.2005, 13:43
все получилось ))
Всем спасибо ..
Вопрос теперь в другом - если первый звук еще не проигрался, а второму уже пора, то 2-й накладывается на 1-й ..
Можно конечно 1-й прерывать, но это все нарушает ..
И похоже это никак не решить ..
Только резать звук на как можно больше кусков ..
Stream - не выход, потому как нарушается задуманная анимация ..
Жень Шень
09.09.2005, 16:18
Может Soun.onSoundComplete поможет?
Если надо запустить второй звук по окончании первого, то:
//Это на запуске первого звука
Soun = new Sound();
Soun.attachSound("S1");
Soun.start(0, 1);
Soun.onSoundComplete = _root.triger;
//Это на первом кадре
function triger() {
//запустить второй звук
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.