PDA

Просмотр полной версии : проблема с addEventListener(Event.SOUND_COMPLETE, onComplete);


dixlofos
11.12.2009, 21:12
var _sound = new Sound();
var _channel:SoundChannel;

_sound.load(new URLRequest("song.mp3"), new SoundLoaderContext(290000));
_channel.addEventListener(Event.SOUND_COMPLETE, onComplete);

stop_.addEventListener(MouseEvent.CLICK, stop_f);
play_.addEventListener(MouseEvent.CLICK, play_f);

function play_f(e:Event){
_channel = _sound.play();
trace("play");
}

function stop_f(e:Event){
SoundMixer.stopAll();
}


all_play.addEventListener(MouseEvent.CLICK, all_play1);

function all_play1(e:Event){
_channel = _sound.play();
removeChild(all_play);
}


function onComplete(e:Event){
trace("complete");
}

компилятор выдает:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/frame1()

если убрать из кода
_channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
то все работает нормально, но естественно, когда заканчиваеться композиция, то ф-ция "onComplete" не вызываеться, а это жизненно необходимо.
Собственно вопрос что делать-то?!

DEAFFF
11.12.2009, 21:29
дождитесь загрузки звука, а после загрузки разрешайте жать на кнопки, причем замените на это:

_channel = _sound.play();
_channel.addEventListener(Event.SOUND_COMPLETE, onComplete);

iflamberg
11.12.2009, 21:29
var _sound = new Sound();
var _channel:SoundChannel;

_sound.load(new URLRequest("song.mp3"), new SoundLoaderContext(290000));
_channel=_sound.play();
_channel.addEventListener(Event.SOUND_COMPLETE, onComplete);

stop_.addEventListener(MouseEvent.CLICK, stop_f);
play_.addEventListener(MouseEvent.CLICK, play_f);

function play_f(e:Event){
_channel = _sound.play();
trace("play");
}

function stop_f(e:Event){
SoundMixer.stopAll();
}


all_play.addEventListener(MouseEvent.CLICK, all_play1);

function all_play1(e:Event){
_channel = _sound.play();
removeChild(all_play);
}


function onComplete(e:Event){
trace("complete");
}


дожидаться загрузки звука по-моему не обязательно, можно канал сразу создавать

dixlofos
11.12.2009, 22:38
iflamberg
ну песня-то 2 раза начинает проигрываться!

DEAFFF
var _sound = new Sound();
var _channel:SoundChannel;
_sound.load(new URLRequest("song.mp3"), new SoundLoaderContext(290000));

all_play.addEventListener(MouseEvent.CLICK, all_play1);

stop_.addEventListener(MouseEvent.CLICK, stop_f);
play_.addEventListener(MouseEvent.CLICK, play_f);


function all_play1(e:Event){
_channel = _sound.play();
_channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
removeChild(all_play);
}

function play_f(e:Event){
_channel = _sound.play();
trace("play");
}

function stop_f(e:Event){
SoundMixer.stopAll();
}

function onComplete(e:Event){
trace("complete");
}

ну вроде сделал как вы написали, но когда песня заканчиваеться, то ф-ция "onComplete" не вызываеться! %)

bicubic_bublic
12.12.2009, 02:05
ну вроде сделал как вы написали, но когда песня заканчиваеться, то ф-ция "onComplete" не вызываеться! %)

И НЕ БУДЕТ

Psycho Tiger
12.12.2009, 10:59
Вроде Event.COMPLETE должно подписываться у Sound`а, а не у SoundChannel`а для такого эффекта, как вы хотите...