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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.05.2011, 18:50
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 11  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Возможно вам подойдёт такой способ (не уверен что он лучший), но всё же. Всё что нужно это создавая объекты Sound, присваивать в конце имени число клавиши, к которой этот звук будет относится.
В примере ниже сделаны только два звука для клавиш "право" и "вверх" (37,38). Остальные можете добавить самостоятельно.
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.net.URLRequest;
 
	/**
	 * ...
	 * @author Samana
	 */
	public class Main extends Sprite 
	{
		private var currentKey:uint; //текущая нажатая клавиша
		private var allKeys:Array = [];//массив со всеми клавишами
		private var allSoundChannels:Array = [];//каналы для каждого звука
		private var workKeys:Array=[37,38]//массив с номерами клавиш, которые нужно обрабатывать
 
		private var sound_37:Sound = new Sound(new URLRequest("../lib/piano.mp3"));//музыка для клавиши "право" 37
		private var sound_38:Sound = new Sound(new URLRequest("../lib/guitar.mp3"));//музыка для клавиши "вверх" 38
 
 
		public function Main():void 
		{
			stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
			stage.addEventListener(KeyboardEvent.KEY_UP, key_up);
		}
		//------------------------------------------------------------------------------------
		private function key_down(e:KeyboardEvent):void 
		{
			//если клавиша нажата, то она не будет включать свою мелодию до тех пор
			//пока не будет отжата.
			currentKey = e.keyCode; 
 
			if (workKeys.indexOf(currentKey)!= -1) 
			{
				if (!allKeys[currentKey]) 
				{
					allKeys[currentKey] = true; 
					//play
					allSoundChannels[currentKey] = (this["sound_" + currentKey] as Sound).play();
				}
 
			}	
		}
		//------------------------------------------------------------------------------------
		private function key_up(e:KeyboardEvent):void 
		{
			currentKey = e.keyCode;
 
			if (workKeys.indexOf(currentKey)!= -1) 
			{
				if (allKeys[currentKey])
				{
					allKeys[currentKey] = false;
					//stop
					(allSoundChannels[currentKey] as SoundChannel).stop();
				}
			}
 
		}
		//------------------------------------------------------------------------------------
 
	}
 
}

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

Регистрация: May 2011
Сообщений: 9
Вот вроде получилось при таком раскладе:
Код AS3:
var soundFactory:Sound = new Sound();
var request:URLRequest = new URLRequest("b16.mp3");
soundFactory.load(request);
var isPlaying:Boolean = false;
var channel:SoundChannel;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keydownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyupHandler);
 
function keydownHandler(event:KeyboardEvent):void
{
      if ( !isPlaying)
     {
             isPlaying = true;
             channel = soundFactory.play();
             channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
     }
}
 
function keyupHandler(event:KeyboardEvent):void
{
      if ( isPlaying)
      {
             channel.stop();
             isPlaying = false;
      }
}
 
function soundCompleteHandler(event:Event):void
{
        isPlaying = false;
        channel.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
}
Еще бы убрать цикл, чтоб по окончании звучания ноты(4 сек.) больше не играла, было бы хорошо.
Остается только для всех нот прописать код на каждую клавишу.
.....
Вопрос: как убрать реагирование раскладки клавиатуры на большую и малую литеру. Смотрел вроде как вводить keyCode и charCode для каждой клавиши, но еще не пробовал, но с keyCode срабатывало только при нажатом шифте, когда нажимал клавишу "А".


Последний раз редактировалось Андрей_1970; 25.05.2011 в 13:20.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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