Actionscript 3 ActionScript 3.0声音不工作

Actionscript 3 ActionScript 3.0声音不工作,actionscript-3,flash-cs6,Actionscript 3,Flash Cs6,所以在按键盘时发声有困难吗 我有以下几种进口产品: 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 ke

所以在按键盘时发声有困难吗

我有以下几种进口产品:

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的库中,但它仍然不工作。知道为什么吗

多谢各位

更新:

我得到的声音工作,但没有使用外部的方法,我正试图做上述

必须在内部进行

因此,您需要:

import flash.media.SoundChannel;
-然后你需要确保你的声音文件在你的fla库中

一旦它在图书馆

-右键单击>属性

-选择“动作脚本”选项卡

-选中“导出操作脚本”

-根据声音给班级起一个名字

-按ok

添加此变量(您的变量将不同):

downsound是变量的选定名称,downsound是类的名称(先前为声音文件制作的名称)

然后将其添加到要播放声音的位置:

var myDownSound:SoundChannel = downSound.play();
如果你不能让它像我一样在外部工作,就这样做

要获得更好的解释,请观看以下youtube视频:

如果您将
.mp3
文件与输出
.swf
放在同一文件夹中,而不是类
.as
源文件附近,则代码工作正常(因为加载声音的是swf文件,所以路径必须与之相对)


您需要加载外部文件,这是异步操作。然后跟踪加载事件,如果一切正常,您可以播放加载的声音

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中使用过它,所以我在这里无能为力。尽管如此,互联网还是提供了一个链接:

你应该将你的更新作为答案而不是问题发布,因为它实际上回答了问题。这样,您甚至可以在StackOverflow中获得一些不错的积分。:)啊,好建议,哈哈。这就解决了。然而,为什么我给它一个确切的目录c:user\sof,它就不工作了?除了将mp3和swf放在同一个目录中,别无选择?@GeorgeDziouba尝试转义绝对路径或转换它(从
文件开始://
和向前斜杠
/
)或使用相对路径(可以使用
向上移动一个文件夹,并使用
/
不需要转义的斜杠)。嘿,问题是mp3和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();
        }
    }
}
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);
}