不久之前的一個討論,整理一下。
現象
採用attachSound方法創建的聲音,如:
var mySound = new Sound();
mySound.attachSound("soundLinkageID");
mySound.start();
在單獨播放時候很正常,可是一旦被loadMovie,就失效了。
mySound.attachSound("soundLinkageID");
mySound.start();
原因
attachSound是從庫中複製聲音到舞臺。而loadMovie后存在多個庫,想從一個沒有包含聲音的庫中得到聲音,自然不會成功。那麼究竟是從哪個庫中複製呢?測試證明,是綁定聲音對象的影片剪輯對應的庫。所謂的綁定聲音的mc,就是創建聲音對象時用到的參數:
var mySound = new Sound(
mc);
如果缺少參數,則是創建全局聲音。(原先誤以為是默認取_root,其實是不對的)
這個是Flash2004幫助裏面的一個示例
下面的示例创建名为 global_sound 的新 Sound 对象。示例中的第二行调用 setVolume() 并将影片中的所有声音的音量调整为 50%。
global_sound = new Sound();
global_sound.setVolume(50);
此時的庫是主swf對應的庫,而主swf中的庫自然沒有要複製的聲音了,這便是問題所在。
解決方案
創建聲音時指定綁定mc。
如果是幀上的AS,用 var mySound = new Sound(this) 即可。
或者強制令 _lockroot為true,然後 var mySound = new Sound(_root)
需要注意的是_lockroot需要flashPlayer7支持