2017-01-22 2 views
2

Так возникают проблемы, делая звук на клавиатуре нажмитеActionScript 3.0 звук не работает

У меня есть импорт:

import flash.net.URLRequest; 
import flash.media.Sound; 

У меня есть переменные

private var soundDownRequest:URLRequest = new URLRequest ("SoundDown.mp3"); 
private var downSound:Sound = new Sound (soundDownRequest); 

и слушатель событий

private function keyDownHandler(evt:KeyboardEvent):void 
    { 

      if (evt.keyCode == 40)//ascii for down arrow 
      { 
       downSound.play(); 

      } 
    } 

Звуковая папка находится в той же папке, что и .as, ее также в библиотеке fla, но она все еще не работает. Любая идея почему?

спасибо.

Update:

Я получил звук работать, но не используя внешний метод, который я пытался сделать выше.

Придется сделать это внутренне.

так что вам нужно:

import flash.media.SoundChannel; 

-Тогда вы должны убедиться, что ваш звуковой файл находится в библиотеке FLA.

как только его в библиотеке

-Верно нажмите> Свойства

-Выберите

"экспорт для сценария действий" Action Script

-Check

-Отдай класс имя в соответствии со звуком

-press ok

добавить эту переменную (ваш будет отличаться):

private var downSound:TheDownSound = new TheDownSound(); 

downsound является выбранное имя переменной, и TheDownSound это имя класса (одно было сделано ранее для звукового файла)

затем добавить это туда, где вы хотите, чтобы звук играть:

var myDownSound:SoundChannel = downSound.play(); 

Сделайте это, если вы не можете заставить его работать внешне похож на меня.

для лучшего объяснения смотреть это ребята Youtube видео: https://www.youtube.com/watch?v=SZpwppe7yGs

+1

Вы должны опубликовать свое обновление как ответ, а не вопрос, потому что он фактически отвечает на вопрос. Таким образом, вы сможете получить хорошие очки в StackOverflow. :) – Vesper

+0

Aaah, хороший совет ха-ха. –

ответ

1

Ваш код работает вполне нормально, если вы кладете файл .mp3 в той же папке, что и выход .swf, не вблизи исходного файла класса .as (потому что его файл SWF загружается звук, так что путь должен быть по отношению к нему)

public class ASEntryPoint extends Sprite { 

    private var soundDownRequest:URLRequest = new URLRequest ("click.mp3"); 
    private var downSound:Sound = new Sound (soundDownRequest); 

    public function ASEntryPoint() { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
    } 


    private function keyDownHandler(evt:KeyboardEvent):void{ 
     if (evt.keyCode == 40) {     
      downSound.play(); 
     } 
    } 
} 
+0

Это решило это. Однако, как получилось, когда я даю ему точный каталог c: user \ soOnSoForth, он не работает? Нет ли выбора, кроме как иметь mp3 и swf в том же каталоге? –

+0

@GeorgeDziouba пытается избежать абсолютного пути или преобразовать его (начиная с 'file: ///' и с помощью косой черты '/') или используя относительную (вы можете использовать '..' для перемещения одной папки вверх и использовать'/'слэши, которые не требуют экранирования). – www0z0k

1

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

import flash.events.SecurityErrorEvent; 
import flash.events.IOErrorEvent; 
import flash.events.Event; 

import flash.net.URLRequest; 

import flash.media.Sound; 
import flash.media.SoundChannel; 

// Keep the sound loader from being garbage collected. 
var soundLoader:Sound; 

function loadSound(url:String):void 
{ 
    var aRequest:URLRequest = new URLRequest(url); 

    soundLoader = new Sound(); 

    // Handle the normal loading. 
    soundLoader.addEventListener(Event.COMPLETE, onLoaded); 

    // Handle the error cases. 
    soundLoader.addEventListener(IOErrorEvent.IO_ERROR, onError, false, 0, true); 
    soundLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError, false, 0, true); 

    soundLoader.load(aRequest); 
} 

var audioChannel:SoundChannel; 

function onLoaded(e:Event):void 
{ 
    // Sound is available here for playback. 

    audioChannel = soundLoader.play(); 
} 

function onError(e:Event):void 
{ 
    trace(e); 
} 

Вы также можете обрабатывать свой звук как потоковое аудио, но я работал с тем, что лет назад в AS2, так что я не могу здесь. Тем не менее, интернет предлагает ссылку: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d22.html

+0

Эй, проблема в том, что mp3 и swf не были в том же каталоге. Ваш код лучше, чем то, что я использовал, так что все-таки отличный ответ. Его приятно иметь проверку ошибок. –