0

我在 AS3 游戏中遇到了一个奇怪的问题,即声音相互干扰。

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

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

同样,如果 A 正在播放循环声音,而 B 播放包含停止声音事件的帧,它将停止 A 的循环。

似乎很清楚,正在发生的事情是 Flashplayer 只为每个影片剪辑类型分配一个频道,而不是每个影片剪辑实例,但是谷歌并没有真正向我展示任何东西。

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

谢谢你的时间。

[编辑]

为了更好地解释我的意思,假设有一个 Baddie 电影剪辑,其中包含几个动画,例如敌人奔跑、蹲伏、跳跃、开枪。

影片剪辑中有两层,一层用于图形(动画),一层用于声音。

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

我的问题是:如果舞台上同时有两个或多个这样的影片剪辑,其中一个正在播放枪声,其他的就不会播放枪声(他们会虽然仍然正确动画)。

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

4

1 回答 1

0

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

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

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

希望这可以帮助。

于 2013-01-25T07:44:47.683 回答