动作脚本3:Movieclip时间线中的声音相互关闭

时间:2013-01-24 19:19:16

标签: actionscript-3 audio

我有一个奇怪的问题,声音在AS3游戏中互相打断。

游戏世界中的每个敌人都有一个包含其图形和声音的动画片段;游戏代码调用gotoAndPlay()来播放具有相应声音的特定动画。 (动画片段是在Flash中制作的,而.swc是导入到Flashdevelop项目中的)

问题在于,当特定类型的敌人的多个实例同时出现在屏幕上时,他们的声音会相互“踩踏”:如果敌人A和B属于同一类型,并且A位于在播放声音的中间,B将无法播放该声音 - gotoAndPlay会产生正确的动画,但声音不会播放。

类似地,如果A正在播放循环声音并且B播放包含停止声音事件的帧,则它将停止A的循环。

很明显,正在发生的事情是Flashplayer只为每个movieclip 类型分配一个频道,而不是每个movieclip实例,但Google并没有真正向我展示任何内容。

这种情况是否有最佳做法? (即同一个动画片段的多个实例,其时间轴上有声音+动画)我做错了什么?!

感谢您的时间。

[edit]

为了更好地解释一下我的意思,让我们说有一个Baddie动画片段,其中包含几个动画,例如敌人跑步,蹲伏,跳跃,开枪。

动画片段中有两个图层,一个用于图形(动画),另一个用于声音。

在第20帧上有一个muzzleflash(在动画层上)和相应的枪声(在声音层上);在第40帧上有一个跳跃动画和相应的跳跃声音。

我的问题是:如果舞台上同时有两个或两个以上的动画片段,其中一个正在播放枪击声,其他人将不会播放枪声(他们仍然会正确地制作动画)。

似乎Flashplayer只为某个动画片段的所有实例分配单个音频通道。这似乎不是预期的行为,因为它没用,所以我猜我已经搞砸了嵌入(可能有一个参数或标志隐藏在某处让我说“给每个实例自己的声道“?)

1 个答案:

答案 0 :(得分:0)

您应该使用Sound()及相关课程,而不是时间表。我不确定为什么会发生这种情况,这是令人惊讶的,因为很多非编码器会以这种方式控制声音,但是一旦你习惯它就会对声音有更多的控制,而且很漂亮简单。这个页面非常好,很好地解释了你需要的课程:

http://www.republicofcode.com/tutorials/flash/as3sound/

当我开始使用Flash并使用时间轴时,我记得有很多声音出现问题,我会在另一个实例开始之前停止前一个声音,一旦我开始以编程方式控制它们我从来没有遇到过问题 - 表面上看时间轴似乎更容易,因为大多数用户很早就学会了播放头控制功能,但它可以很快变得复杂和混乱 - 更好地将问题和控制声音分离到专用类中。

希望这有帮助。