Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.03.2015, 15:41
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 1  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
По умолчанию Resume звука в том же канале

То ли у меня лыжи не едут, то ли еще что.

Мне нужно, чтобы сначала я тормознул звук, а потом запустил его с того места, где он остановился. Запускаю, естественно, через sound.play( pausePosition ). Но, как я понимаю, в этот момент создается новый SoundChannel, а мне нужно, чтобы канал остался тем же самым, потому что несколько раньше на него был повешен листенер на Event.SOUND_COMPLITE.

Никто такую задачку не решал?


Собственно, вот кусок кода, чтобы понимать, что именно я хочу сделать. Это фрамент класса, который оптом фризит все каналы звука, которые переданы ему через addChannel, и оптом же запускает с той позиции, где зафризил.

Код AS3:
private static var _currentSoundChannels : Dictionary = new Dictionary();
 
public static function addChannel( channel : SoundChannel, sound : Sound ) : void
{
	_currentSoundChannels[channel] = { sound : sound, pausePosition : -1 };
}
 
public static function freezeAll() : void
{
	for ( var soundChannel : SoundChannel in _currentSoundChannels )
	{
		_currentSoundChannels[soundChannel].pausePosition = soundChannel.position;
		soundChannel.stop();
	}
}
 
public static function unFreezeAll() : void
{
	for ( var soundChannel : SoundChannel in _currentSoundChannels )
	{
		var sound : Sound = _currentSoundChannels[soundChannel].sound as Sound;
		var pausePosition : int = _currentSoundChannels[soundChannel].pausePosition;
		soundChannel = sound.play( pausePosition );
	}
}

Старый 16.03.2015, 16:33
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
имхо, чтобы канал остался тем же самым не выйдет
а в чем проблема отписать отработавший SoundChannel и подписать новый, только словарь придется 'вывернуть' на Sound -> SoundChannel

Старый 16.03.2015, 16:40
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 3  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Не выйдет, потому что play возвращает новый канал и ничего с этим не поделать.
__________________
Поймай яблоко 2!

Старый 16.03.2015, 17:01
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
а в чем проблема отписать отработавший SoundChannel и подписать новый
Там проект не новый, каналы раздаются наружу и подписываются слушателями в разных частях кода. Много переделывать. Вот если бы можно было из канала выдернуть функцию, которую надо дернуть по Event.SOUND_COMPLETE...

Цитата:
Не выйдет, потому что play возвращает новый канал и ничего с этим не поделать.
Ну да.

Как вариант, получается знатный костыль - сохранить базовый канал, после фриза/унфриза слушать новый и, когда по нему придет событие Event.SOUND_COMPLETE, продиспатчить его по базовому каналу. Слушатель и не догадается.

Добавлено через 20 часов 3 минуты
Появилось кровожадное желание что-нибудь оторвать тому, кто делал саунд в AS3. ))
Если звук зациклен и мы запускаем его с некоторой точки pausePosition, то в цикле проигрывается потом именно этот отрезок - от pausePosition до конца.

Есть какой-нибудь способ, кроме как проиграть этот хвост один раз, а потом по SOUND_COMPLETE запуститься в цикле с нуля?

Старый 17.03.2015, 13:25
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Очевидно, нет.
__________________
Поймай яблоко 2!

Старый 17.03.2015, 13:45
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
а потом по SOUND_COMPLETE запуститься в цикле с нуля?
а SOUND_COMPLETE там тоже не сработает) Вчера точно с такой же проблемой столкнулся
Только если делать play(time, 1); и тогда по комплиту заново запускать. Но это же вообще шняга. Каждый раз будут новые каналы, каждый раз новая подписка на событие. Отстой короче.
Цитата:
Появилось кровожадное желание что-нибудь оторвать тому, кто делал саунд в AS3. ))
+1)

Старый 17.03.2015, 13:49
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Как не сработает? Речь идет о первом запуске без loop.
__________________
Поймай яблоко 2!

Старый 17.03.2015, 13:52
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Как не сработает? Речь идет о первом запуске без loop.
Да, я там свой пост уже поправил

Старый 17.03.2015, 14:10
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 9  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Только если делать play(time, 1); и тогда по комплиту заново запускать. Но это же вообще шняга. Каждый раз будут новые каналы, каждый раз новая подписка на событие. Отстой короче.
Ну, подписка-отписка - от этого не убудет.
В принципе, работает.

Столкнулся с довольно занятной проблемой - надо сбросить дамп текущих активных каналов, но у SoundChannel нет свойства, которое может его идентифицировать. Чего бы им name-то было не сделать, как у тех же дисплей-объектов? А то получается вывод десяти [object SoundChannel] и хз, что за каналы.

Хотя видно, что если брейкпойнт поставить, то у каждого канала вполне себе есть идентификатор.

Ну и, конечно, финализация SoundChannel'а - это отдельная песня.


Последний раз редактировалось mikhailk; 17.03.2015 в 14:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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