我有一个奇怪的问题,声音在AS3游戏中互相打断。
游戏世界中的每个敌人都有一个包含其图形和声音的动画片段;游戏代码调用gotoAndPlay()来播放具有相应声音的特定动画。 (动画片段是在Flash中制作的,而.swc是导入到Flashdevelop项目中的)
问题在于,当特定类型的敌人的多个实例同时出现在屏幕上时,他们的声音会相互“踩踏”:如果敌人A和B属于同一类型,并且A位于在播放声音的中间,B将无法播放该声音 - gotoAndPlay会产生正确的动画,但声音不会播放。
类似地,如果A正在播放循环声音并且B播放包含停止声音事件的帧,则它将停止A的循环。
很明显,正在发生的事情是Flashplayer只为每个movieclip 类型分配一个频道,而不是每个movieclip实例,但Google并没有真正向我展示任何内容。
这种情况是否有最佳做法? (即同一个动画片段的多个实例,其时间轴上有声音+动画)我做错了什么?!
感谢您的时间。
[edit]
为了更好地解释一下我的意思,让我们说有一个Baddie动画片段,其中包含几个动画,例如敌人跑步,蹲伏,跳跃,开枪。
动画片段中有两个图层,一个用于图形(动画),另一个用于声音。
在第20帧上有一个muzzleflash(在动画层上)和相应的枪声(在声音层上);在第40帧上有一个跳跃动画和相应的跳跃声音。
我的问题是:如果舞台上同时有两个或两个以上的动画片段,其中一个正在播放枪击声,其他人将不会播放枪声(他们仍然会正确地制作动画)。
似乎Flashplayer只为某个动画片段的所有实例分配单个音频通道。这似乎不是预期的行为,因为它没用,所以我猜我已经搞砸了嵌入(可能有一个参数或标志隐藏在某处让我说“给每个实例自己的声道“?)
答案 0 :(得分:0)
您应该使用Sound()
及相关课程,而不是时间表。我不确定为什么会发生这种情况,这是令人惊讶的,因为很多非编码器会以这种方式控制声音,但是一旦你习惯它就会对声音有更多的控制,而且很漂亮简单。这个页面非常好,很好地解释了你需要的课程:
http://www.republicofcode.com/tutorials/flash/as3sound/
当我开始使用Flash并使用时间轴时,我记得有很多声音出现问题,我会在另一个实例开始之前停止前一个声音,一旦我开始以编程方式控制它们我从来没有遇到过问题 - 表面上看时间轴似乎更容易,因为大多数用户很早就学会了播放头控制功能,但它可以很快变得复杂和混乱 - 更好地将问题和控制声音分离到专用类中。
希望这有帮助。