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

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

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

Регистрация: Aug 2012
Сообщений: 297
По умолчанию Почему во время касания двух объектов не всегда воспроизводится звук?

Здравствуйте.

Цель: Сделать так, чтобы при касание двух объектов (главного персонажа и лазера-копья) воспроизводился звук.

Проблема: Звук воспроизводится, но не всегда или иногда воспроизводится, но с опаздыванием.

Класс "касание":
Код AS3:
package madness
{
	import flash.events.Event;
	import flash.display.MovieClip;
	import madness.effects.Sounds;
 
	public class Collision
	{
		public function Collision()
		{
			Settings.stage.addEventListener(Event.ENTER_FRAME,collision);
		}
		private function collision(event:Event):void
		{
			var laserlance:Array = Settings.laserlance;
			const laserlanceLength:int = laserlance.length;
			var mainPersona:MovieClip = Settings.mainPersona;
			for(var e:int = 0; e < laserlanceLength; e++)
			{
				var ll:MovieClip = laserlance[e];
				if(ll.hitTestObject(mainPersona))
				{
					var alive:Boolean = laserlance[e].alive;
					if(alive)
					{
						Sounds.playCollisionLaserLanceAndMainPersona();
						laserlance[e].alive = false;
					}
				}
			}
		}
	}
}
Класс "звуки":
Код AS3:
package madness.effects
{
	import flash.media.Sound;
	import flash.net.URLRequest;
	import flash.net.URLLoader;
	import flash.media.SoundTransform;
	import flash.media.SoundChannel;
	import madness.Settings;
 
	public class Sounds
	{
		public static function playCollisionLaserLanceAndMainPersona():void
		{
			var ur:URLRequest = new URLRequest('files/Laser-lance collision main persona.mp3');
			var smp:Sound = new Sound(ur);
			var sc:SoundChannel = new SoundChannel();
			sc = smp.play();
			sc.soundTransform = new SoundTransform(Settings.volumeCollisionLaserLanceAndMainPersona);
		}
	}
}

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Возможно потому что канал надо обнулять.

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

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от Bletraut Посмотреть сообщение
Возможно потому что канал надо обнулять.
То есть, если у меня в этот момент (когда происходит касание) воспроизводится какой-либо посторонний\аналогичный звук, то я должен прекратить его воспроизведение?

Старый 09.09.2013, 00:19
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 4  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Я думаю, что в данном случае более критично то, что Вы его каждый раз грузите по новой.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Этот подход вообще не верный. Для звуков можно было бы создать класс со статическими методами, где сразу создать все необходимые звуки в одном экземпляре, а потом при вызове метода просто дергать soundChannel.play() вместо создания нового звука и канала

Старый 09.09.2013, 12:14
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 6  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Еще лучше использовать dispatchEvent в классе Collision, а в классе Sounds слушать это событие, а не жестко связывать с методами класса Sounds.

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

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

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


 


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


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