FLASH AS3声音重叠
好的,我是一个总闪光as3 noob,所以这一定很容易解决我猜。我正在用闪存cs6制作一个带有录制声音的音板,非常简单:1个画面,10个按钮,每个按钮都会发出不同的声音。问题是这些声音重叠,所以我需要的是当我按下一个按钮时,其他声音停止播放。有人请吗?FLASH AS3声音重叠
请参阅Sound
类中的play()
方法文档,它将返回一个SoundChannel
对象,该对象具有stop()
方法。
所以你可以那样做(示意图):
var currentChannel:SoundChannel;
button1.addEventListener(MouseEvent.CLICK, onButtonClick);
button2.addEventListener(MouseEvent.CLICK, onButtonClick);
button3.addEventListener(MouseEvent.CLICK, onButtonClick);
function onButtonClick(event:MouseEvent):void
{
/* provided you have implemented selectSoundByButton func somewhere */
const sound:Sound = selectSoundByButton(event.currentTarget);
if (currentChannel) {
currentChannel.stop();
}
currentChannel = sound.play();
}
更详细的描述:
比方说,你想创建另一个闪光灯屁按钮的应用程序。这就是你必须做的:
- 创建一个按钮符号,将它添加到舞台并在属性选项卡中给它一个实例名称。我们称之为myButton
- 使用file-> import将声音添加到库中
- 将此声音导出到actionscript。右键单击库中的声音,在“actionscript选项卡”上选中“导出为动作脚本”,“在帧1中导出”。填充“Class”输入,并输入声音所需的类名(例如MySound)
-
然后,您必须触发单击按钮上的声音播放。所以,你应该把下面的代码到你的flash影片的第一帧:
SoundMixer.stopAll();
如果你是:
import flash.media.Sound; import flash.media.SoundChannel; import flash.events.MouseEvent; var currentChannel:SoundChannel; const mySound:Sound = new MySound(); function onClick(e:MouseEvent):void { if (currentChannel) { currentChannel.stop(); } currentChannel = mySound.play(); } myButton.addEventListener(MouseEvent.CLICK, onClick);
播放声音之前,这对每个按钮的代码添加直接从Adobe Flash中的时间线添加动作,不需要导入类。如果你从一个IDE工作像的FlashDevelop或FlashBuilder,该代码添加到开始(Package {
后):
import flash.media.SoundMixer;
编码愉快!
它解决PO问题,但通过提供潜在的另一个问题。投票下来。 SoundMixer.stopAll();将停止当前播放的任何声音,而不仅仅是问题中提到的声音。如果PO后来需要背景音乐呢?或者如果其他声音应该在其他地方播放?这里提供的解决方案会产生比解决问题更多的问题。 – BotMaster
知道这不是一个坏的功能。我已经建议了比这更深入的东西(比如将按钮声音存储到变量并在播放下一个声音之前停止当前声音)。 但是,OP公布他们是一个noob,我怀疑他们正在添加背景音乐。对于不知道或想要编码的人来说,这是一个快速解决方案。 –
嘿男人谢谢你的回答。我真的不知道你的意思,所以我们说只有一个按钮。你能告诉我该做什么吗?每当我点击按钮声音重新开始但没有重叠时,我在哪里放这个代码。 – AdamXpelled
好的。我会以更详细的方式重写它。 – leetwinski
我跟着步骤,但无济于事。按钮现在被称为“myButton”,并且声音的类(名称为“goodmorning”)被称为“MySound”,因此我可以粘贴代码而不做任何更改,但不起作用。每次我点击一个新的声音来。告诉我,在AS2中更容易吗?也许我可以重新开始。我感谢你的帮助兄弟。 – AdamXpelled