ActionScript 3.0 声音不工作

Posted

技术标签:

【中文标题】ActionScript 3.0 声音不工作【英文标题】:ActionScript 3.0 sound not working 【发布时间】:2017-06-07 10:34:18 【问题描述】:

所以在键盘按下时无法发出声音

我有进口商品:

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 库中。

一旦它在图书馆里

-右键>属性

-选择动作脚本选项卡

-勾选“导出动作脚本”

-根据声音给类命名

-按确定

添加这个变量(你会有所不同):

private var downSound:TheDownSound = new TheDownSound();

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

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

var myDownSound:SoundChannel = downSound.play();

如果你不能像我一样让它在外部工作,请这样做。

要获得更好的解释,请观看这​​些家伙的 youtube 视频: https://www.youtube.com/watch?v=SZpwppe7yGs

【问题讨论】:

您应该将更新发布为答案而不是问题,因为它实际上回答了问题。这样你甚至有资格在 *** 中获得一些不错的分数。 :) 啊啊,好建议哈哈。 【参考方案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();
        
    

【讨论】:

这解决了它。但是,当我给它确切的目录 c:user\soOnSoForth 时它为什么不起作用?有没有办法把mp3和swf放在同一个目录下? @GeorgeDziouba 尝试转义绝对路径或转换它(以file:/// 和正斜杠/ 开头)或使用相对路径(您可以使用.. 向上移动一个文件夹并使用不需要转义的 / 斜杠)。【参考方案2】:

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

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

【讨论】:

嘿,问题是 mp3 和 swf 不在同一个目录中。您的代码比我使用的代码要好,所以仍然是一个很好的答案。很高兴有一个错误检查。

以上是关于ActionScript 3.0 声音不工作的主要内容,如果未能解决你的问题,请参考以下文章

在Adobe Animate ActionScript 3.0中循环

动作脚本 3.0;循环音频文件

如何在 actionscript 3.0 中使用掩码?

函数不返回值(错误 1170;ActionScript 3.0)

使用 javascript 与 actionscript 3.0 交互

设置可见性槽属性不起作用 actionscript 3.0