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中循环
函数不返回值(错误 1170;ActionScript 3.0)