Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   проблема с addEventListener(Event.SOUND_COMPLETE, onComplete); (http://www.flasher.ru/forum/showthread.php?t=133744)

dixlofos 11.12.2009 21:12

проблема с addEventListener(Event.SOUND_COMPLETE, onComplete);
 
Код AS3:

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()

если убрать из кода
Код AS3:

_channel.addEventListener(Event.SOUND_COMPLETE, onComplete);

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

DEAFFF 11.12.2009 21:29

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

Код AS3:

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


iflamberg 11.12.2009 21:29

Код AS3:

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
Код AS3:

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`а для такого эффекта, как вы хотите...


Часовой пояс GMT +4, время: 23:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.