PDA

Просмотр полной версии : И снова здравствуйте: preloader+attachSound


Ляксей
31.05.2007, 22:29
Тем с таким названием прочитал штук двадцать, а одвед не нашёл, так что не пинать.
Есть основной swf файл - menu.swf - там красота и икебана, десяток классов и сотни строчек кода. Всё работает хорошо.
В library есть звуковой файл snd_mouseover ( экспортирован для ActionScript).
При наведение мышки на элемент меню происходит

//Play Sound
var my_sound:Sound = new Sound();
my_sound.attachSound("snd_mouseover");
my_sound.setVolume(50);
my_sound.start();

Здесь никаких проблем нет.

Сушествует второй swf файл - preloader.swf, который загружает в себя menu.swf. Так вот после этого звуки не работают.
Есть у меня подозрение, что как-то меняется путь к библиотеке после загрузки во внешний preloader. Но функции типа attachMovie работают нормально, то есть вроде бы путь к библиотеке не изменился.
Может в чём-то другом проблема?

this.create
31.05.2007, 23:17
var mc:MovieClip = this.createEmptyMovieClip('mc', this.getNextHighestDepth());
var my_sound:Sound = new Sound(mc);
my_sound.attachSound("sound");
my_sound.setVolume(50);
my_sound.start();

Предположение такое: объект звука создается на руте прелоадера, а запускается из рута загруженного клипа.
Уточняю: вы прописываете для объекта класса Sound target рут прелоадера (самый главный рут фильма). Что делает Sound? Он ищет звук для аттача в библиотеке прелоадера. Попробуйте импортните ваш звук в библиотеку прелоадера - и ваш код заработает.

Ляксей
31.05.2007, 23:54
Да, похоже это так и есть. Когда я вставляю в библитеку прелоадера звуки , всё работает хорошо.
А как мне для
my_sound.attachSound("sound");
уточнить из какой библиотеки брать звуки.
_lockroot = true;
не помогает. У меня в коде везде используется ссылка на локальный рут, но как воспользоваться его библиотекой для attachSound что-то не могу понять. Это вообще возможно?

Спасибо, разобрался
Вот так работает :yahoo:
var my_sound:Sound = new Sound(GLB_data.m_local_root);
где GLB_data.m_local_root - ссылка на рут menu.swf

this.create
01.06.2007, 00:15
Спасибо, разобрался
Вот так работает :yahoo:
var my_sound:Sound = new Sound(GLB_data.m_local_root); где GLB_data.m_local_root - ссылка на рут menu.swf Ну если очень хотите локальный рут, то, пожалуйста:
var my_sound:Sound = new Sound(this);
или ссылку на локальный рут.

Ляксей
01.06.2007, 03:17
Дело в том, что this - это у меня вообще в классе, который не унаследован от MovieClip. A m_local_root я ввёл как замену для _root, когда ещё не знал про _lockroot свойство.