![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 176
|
Если делаю просто через Sound.close() выводит ошибку
Error: Error #2029: This URLStream object does not have a stream opened. В самом же примере хелпа данное действие делается через блок try/catch: А как всё таки правильно оборвать? |
|
|||||
|
Приравнять snd к null?
Хотя в мануале говорится, что URLStream.close() должен обрывать загрузку...
__________________
Дело не в тебе Последний раз редактировалось AL.exe; 28.08.2008 в 02:41. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 135
|
Цитата:
Если у вас после закрытия продолжает играть музыка, то это остатки забуференного. При закрытии соединения вы можете остановить звук путем SoundChannel.stop(); |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 24
|
Можно сделать что-то наподобие класса-оболочки. Примерно так:
package
{
import flash.events.EventDispatcher;
//можно и не наследовать от EventDispatcher, если события от этого класса не нужны
public class SoundWrapper extends EventDispatcher
{
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
//экземпляр Sound
protected var __sound:Sound;
public function get sound():Sound
{
return __sound;
}
//экземпляр SoundChannel
protected var __soundChannel:SoundChannel;
public function get soundChannel():SoundChannel
{
return __soundChannel;
}
//true - если произошло событие OPEN объекта __sound
protected var __isOpened:Boolean;
/**
* если true, то при событии OPEN объекта __sound
* нужно закрыть соединение
*/
protected var __toClose:Boolean;
//constructor
public function SoundWrapper()
{
__sound = new Sound();
__sound.addEventListener(Event.OPEN, __onSoundOpen);
__sound.addEventListener(IOErrorEvent.IO_ERROR, __onSoundIOError);
__isOpened = false;
__toClose = false;
}
//начинает воспроизведение
public function play():void
{
__soundChannel = __sound.play();
}
//останавливает воспроизведение
public function stop():void
{
if(__soundChannel != null)
{
__soundChannel.stop();
}
}
//начинает загрузку
public function load(__aURLRequest:URLRequest):void
{
__sound.load(__aURLRequest);
}
//останавливает загрузку
public function close():void
{
if(__isOpened)
{
__sound.close();
__sound.removeEventListener(Event.OPEN, __onSoundOpen);
__sound.removeEventListener(IOErrorEvent.IO_ERROR, __onSoundIOError);
}
else
{
__toClose = true;
}
}
//при событии OPEN объекта __sound
protected function __onSoundOpen(event:Event):void
{
__isOpened = true;
if(__toClose)
{
close();
}
}
//при событии IOError объекта __sound
protected function __onSoundIOError(event:IOErrorEvent):void
{
}
}
}
Ещё можно проверять экземпляр Sound в этом классе на bytesLoaded, потому что бывают ситуации, когда загрузка началась (т.е. событие OPEN произошло) и больше ничего не грузится. Тогда при попытке закрыть тоже появляется ошибка #2029 Последний раз редактировалось konstantin.noir; 30.08.2008 в 05:01. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 1
|
спасибо большое с утра с этими ошибками мучаюсь
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|