Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 1,2 > У объекта Sound не срабатывает событие onLoad


Автор: egrik 14.10.2008, 15:14
Добрый день, кто-нибудь объясните, плиз, на простом примере следующую ситуацию:

Код
_root.onEnterFrame = function():Void
{
    delete this.onEnterFrame;
    var t = new Sound();
    t.onLoad = function(a):Void
    {
        trace(a);
    }
    t.loadSound('data/snd/bg.mp3', false);
}



Почему в этом случае не срабаывает событие onLoad? Также удивительно то, что если мп3 файла не существует, то событие срабатывает.

Еще момент, если: будет так:

Код
var t = new Sound();
_root.onEnterFrame = function():Void
{
    delete this.onEnterFrame;
    t.onLoad = function(a):Void
    {
        trace(a);
    }
    t.loadSound('data/snd/bg.mp3', false);
}


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

В аттаченом файле пример.

Заранее всем огромнооооое спасибо )

Автор: bars80080 14.10.2008, 15:45
может я не про то, но с этим Load для звука я не сталкивался

делал так:

Код

var t = new Sound();
t.attachSound('link_na_zvuk');

t.start();

Автор: egrik 14.10.2008, 16:26
Цитата(bars80080 @ 14.10.2008,  15:45)
может я не про то, но с этим Load для звука я не сталкивался

делал так:

Код

var t = new Sound();
t.attachSound('link_na_zvuk');

t.start();

спасибо за отклик, но проблема не в том, что я не могу загрузить звук, проблема в том, что я не понимаю, почему, если изменить область видимости, то событие onLoad для Sound не срабатывает, т. е. получается так, что необходимо, чтобы объект Sound был глобальным (судя по примеру). Или я что-то не так понял, вот и хочу этот момент усвоить и развеять все сомнения.

Автор: bars80080 14.10.2008, 16:34
что-то вспоминается, что когда происходит вызов метода, то он проходит по лесенке встроенные объекты->root->вложенные объекты->дальше по вложению

видимо, событие ориентировано на root, а переменная t, всё же создана внутри функции и из root не видна

собсна, больше ничего не скажу

Автор: egrik 14.10.2008, 17:17
Цитата(bars80080 @ 14.10.2008,  16:34)
что-то вспоминается, что когда происходит вызов метода, то он проходит по лесенке встроенные объекты->root->вложенные объекты->дальше по вложению

видимо, событие ориентировано на root, а переменная t, всё же создана внутри функции и из root не видна

собсна, больше ничего не скажу

я уже пробовал делигировать выполнение функции на _root, на _global также пробовал, ничего, все по-прежнему (

Автор: Solomon 21.10.2008, 16:13
эээ. ну собственно ты сохраняешь все это в локальную переменную, кторая при выходе из функции(как и любая другая локальная переменная) перекращает свое существование... или я не прав??? как он может вызвать метод не существующего объекта?

Автор: Solomon 21.10.2008, 16:29
а в случае, когда он файл не находит.. возможно он успевает вызвать функцию, до того как удалитобьект(как вариант. точно утверждать не буду). Собственно я б от метода №1 советовал бы избавиться...

p.s. У меня на селероне 1,8 например ва варианта работают нормально... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)