![]() |
|
||||||||||
|
|||||
|
Возможно вам подойдёт такой способ (не уверен что он лучший), но всё же. Всё что нужно это создавая объекты Sound, присваивать в конце имени число клавиши, к которой этот звук будет относится.
В примере ниже сделаны только два звука для клавиш "право" и "вверх" (37,38). Остальные можете добавить самостоятельно. 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(); } } } //------------------------------------------------------------------------------------ } } |
|
|||||
|
Регистрация: May 2011
Сообщений: 9
|
Вот вроде получилось при таком раскладе:
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); } Остается только для всех нот прописать код на каждую клавишу. ..... Вопрос: как убрать реагирование раскладки клавиатуры на большую и малую литеру. Смотрел вроде как вводить keyCode и charCode для каждой клавиши, но еще не пробовал, но с keyCode срабатывало только при нажатом шифте, когда нажимал клавишу "А". Последний раз редактировалось Андрей_1970; 25.05.2011 в 13:20. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|