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

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

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

Регистрация: Feb 2015
Сообщений: 63
По умолчанию Проблема при поочередном воспроизведении звука

Приветствую! При попытке вставить выстрел в игру столкнулся с проблемой, когда громкость последовательно воспроизводимых звуков нарастает( хотя громкость выставлена 1). Размер звукового файла 2,37 КБ

Примерно все выглядит так:

Код AS3:
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
 
class Fire {
var MP3:Sound = new GameMP3();// GameMP3 - загруженный в библиотеку звук одиночного выстрела
var сhannel:SoundChannel = new SoundChannel();
var volume:Number = 0.0;
var fireOn:Boolean = false;
 
function Fire () {
 
   сhannel = MP3.play();//далее будет проверка на проигрывание, поэтому нужен первый запущенный трек
   сhannel.soundTransform = new SoundTransform(volume);
   volume = 0.0;//пока нет клика звук не слышен
 
   stage.addEventListener(Event.ENTER_FRAME, addSound);
   stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseTrue);
   stage.addEventListener(MouseEvent.MOUSE_UP, mouseFalse); 	  
 
}//function Fire
 
 
function mouseTrue(e:MouseEvent):void {
 
   volume = 1;
   fireOn=true;
 
}//mouseTrue
 
function mouseFalse(e:MouseEvent):void {
 
   fireOn=false;
 
}//mouseFalse
 
function addSound(e:Event):void {
 
    if (fireOn) {
 
 
	 trace(int(сhannel.position),int(MP3.length));// 156 182 - здесь  метод проверки их на равенство, которое почему то не совсем равенство при наибольших  положениях, поэтому взял первое число
 
	 if ( int(сhannel.position) == 156 ) {//ждет окончания проигрывания и запускает новое, очередь из автомата, при значении больше 156 не работает
	 сhannel.stop();// на всякий случай
	 сhannel = MP3.play();
	  }
 
 
}//addSound
 
 
}//class Fire

Старый 28.03.2015, 22:55
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Немного мнения со стороны: логику можно сделать проще, ведь у метода play, есть параметр loops. То-есть вы можете обойтись без enterFrame. При нажатии мышки включайте звук с бесконечным числом повторений, а при отпускании мыши - выключайте звук.
Справка про метод play

Старый 29.03.2015, 08:40
Фомич вне форума Посмотреть профиль Отправить личное сообщение для Фомич Найти все сообщения от Фомич
  № 3  
Ответить с цитированием
Фомич

Регистрация: Feb 2015
Сообщений: 63
Цитата:
Сообщение от samana Посмотреть сообщение
Немного мнения со стороны: логику можно сделать проще, ведь у метода play, есть параметр loops. То-есть вы можете обойтись без enterFrame. При нажатии мышки включайте звук с бесконечным числом повторений, а при отпускании мыши - выключайте звук.
Справка про метод play
Да, такой способ подошел бы мне, но ищу решение, при котором череда звуков воспроизводилась бы без прерывания последнего в произвольном месте. Посоветуйте еще что нибудь по поводу автоопределения конца проигрывания, так как метод ввода вручную какой-то кривой. Ну и нарастание громкости в данном случае продолжает присутствовать, это основной недочет.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
ищу решение, при котором череда звуков воспроизводилась бы без прерывания последнего в произвольном месте
Собственно, решение то элементарное
SoundChannel#soundComplete
Ждем события, и уже после него прерываем звук

Старый 29.03.2015, 14:27
Фомич вне форума Посмотреть профиль Отправить личное сообщение для Фомич Найти все сообщения от Фомич
  № 5  
Ответить с цитированием
Фомич

Регистрация: Feb 2015
Сообщений: 63
samana, caseyryan, спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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