Вопрос следующий: Представте...сидит оркестр, как сделать, что бы при нажатии на любой инструмент он начинал исполнять
свою партию!А если на следующие другие, то они должны включаться в том же месте где играет первый!!!
У меня была как-то подобная необходимость. Тут принцип такой:
1) Перед запуском звука, считываем с помощью свойства .position у звука, который сейчас играет, на какой миллисекунде он сейчас проигрывается.
2) Останавливаем звук, который играет сейчас.
3) Запускаем новый звук с позиции, на которой у нас находился предыдущий звук.
В принципе, можно не качать архив, если создать в .fla 2 кнопки с именами sound1_mc и sound2_mc, а в библиотеке создать 2 звука и прописать им в Linkage имена sound1 и sound2. Желательно, чтобы оба звука были равной длины.
А в коде прописать следующее:
Stage.scaleMode = "noScale";
Stage.align = "TL";
//
var my1_sound:Sound = new Sound(this.sound1_mc);
my1_sound.attachSound("sound1");
var my2_sound:Sound = new Sound(this.sound2_mc);
my2_sound.attachSound("sound2");
//Делаем, чтобы когда мелодия начинала проигрываться заново при окончании
my1_sound.onSoundComplete = my2_sound.onSoundComplete=function () {
this.start();
};
//Создаём переменную, в которую будем запоминать, какой сейчас играет звук
var current_sound:Sound;
//Запоминаем, какой звук соответствует какой кнопке
this.sound1_mc.var_sound = my1_sound;
this.sound2_mc.var_sound = my2_sound;
//
//Создаём обработчик события onRelease, каждый раз при его срабатывании
//будет запускаться функция _root.changeCound_func, в которую будет
//передаваться параметр this.var_sound. Эти параметры мы присвоили кнопкам
//чуть выше
this.sound1_mc.onRelease = this.sound2_mc.onRelease = function() {
_root.changeCound_func(this.var_sound);
};
//
function changeCound_func(new_sound:Sound) {
trace("Запускаем новый звук");
//Создаём переменную, в которую будем запоминать, на какой позиции сейчас
//находится играющий звук
var _soundPos:Number
//Если до этого какой-нибудь звук был запущен, то присваеваем позицию,
//на которой находится этот звук переменной
if(_root.current_sound){
_soundPos = _root.current_sound.position;
}else{
//Если никакого звука до этого не было запущено, то начинаем
//проигрывание с 0
_soundPos = 0;
}
trace("Начинаем проигрывать с позиции "+_soundPos);
//Останавливаем предыдущий звук
_root.current_sound.stop();
//Включаем следующий звук. Деление на 1000 нужно потому, что свойство position задаётся в
//миллисикундах, а в фукнцию start время старта проигрывания передаётся в секундах.
new_sound.start(_soundPos/1000);
//Запоминаем новый звук, в переменной current_sound, потому что теперь
//он проигрывается
_root.current_sound = new_sound;
}
У меня была как-то подобная необходимость. Тут принцип такой:
1) Перед запуском звука, считываем с помощью свойства .position у звука, который сейчас играет, на какой миллисекунде он сейчас проигрывается.
2) Останавливаем звук, который играет сейчас.
3) Запускаем новый звук с позиции, на которой у нас находился предыдущий звук.
В принципе вот и всё =) Архив с проектом вот тут: www.flashist.ru/files/help/sound_start_play_from_time.rar
В принципе, можно не качать архив, если создать в .fla 2 кнопки с именами sound1_mc и sound2_mc, а в библиотеке создать 2 звука и прописать им в Linkage имена sound1 и sound2. Желательно, чтобы оба звука были равной длины.
А в коде прописать следующее:
Stage.scaleMode = "noScale"; Stage.align = "TL"; // var my1_sound:Sound = new Sound(this.sound1_mc); my1_sound.attachSound("sound1"); var my2_sound:Sound = new Sound(this.sound2_mc); my2_sound.attachSound("sound2"); //Делаем, чтобы когда мелодия начинала проигрываться заново при окончании my1_sound.onSoundComplete = my2_sound.onSoundComplete=function () { this.start(); }; //Создаём переменную, в которую будем запоминать, какой сейчас играет звук var current_sound:Sound; //Запоминаем, какой звук соответствует какой кнопке this.sound1_mc.var_sound = my1_sound; this.sound2_mc.var_sound = my2_sound; // //Создаём обработчик события onRelease, каждый раз при его срабатывании //будет запускаться функция _root.changeCound_func, в которую будет //передаваться параметр this.var_sound. Эти параметры мы присвоили кнопкам //чуть выше this.sound1_mc.onRelease = this.sound2_mc.onRelease = function() { _root.changeCound_func(this.var_sound); }; // function changeCound_func(new_sound:Sound) { trace("Запускаем новый звук"); //Создаём переменную, в которую будем запоминать, на какой позиции сейчас //находится играющий звук var _soundPos:Number //Если до этого какой-нибудь звук был запущен, то присваеваем позицию, //на которой находится этот звук переменной if(_root.current_sound){ _soundPos = _root.current_sound.position; }else{ //Если никакого звука до этого не было запущено, то начинаем //проигрывание с 0 _soundPos = 0; } trace("Начинаем проигрывать с позиции "+_soundPos); //Останавливаем предыдущий звук _root.current_sound.stop(); //Включаем следующий звук. Деление на 1000 нужно потому, что свойство position задаётся в //миллисикундах, а в фукнцию start время старта проигрывания передаётся в секундах. new_sound.start(_soundPos/1000); //Запоминаем новый звук, в переменной current_sound, потому что теперь //он проигрывается _root.current_sound = new_sound; }Надеюсь, мой пример поможет =)