2004/11/26 | [DirectorFAQ]如何保持背景音乐连续
类别(DirectorFAQ) | 评论(0) | 阅读(436) | 发表于 23:05
要保持背景音乐连续,那我们就得频繁检测播放背景音乐的声音通道是否空闲,如果空闲就用sound(1).play(member (soundmember))来播放背景音乐。
这时我们就会想到Director中的on idle句柄,只要我们在每个影片的影片剧本中放置一个on idle句柄用来检测播放背景音乐,这样就可以实现背景音乐的连续了。
但是,也正是因为在on idle句柄中的语句会被频繁地运行,如果在on idle句柄中放置的处理语句比较多,会比较耗费系统资源。
如果要回避这个问题,我们换一种思路来考虑,背景音乐为什么会中断不连续呢?就是因为在每个影片中都有播放背景音乐的处理程序,在影片跳转的时候,播放背景音乐的行为都会重新执行,如果我们用一个单独的MIAW影片来播放背景音乐,就可以做到不管你的影片怎么跳转,背景音乐都可以不受干扰的播放,除非你关闭了播放背景音乐的MIAW 。
综上所述,我们至少有两种方法来解决这个问题:
  • 解决方法一、使用on idle句柄。
    然后新建一个影片剧本(script的type属性为movie),输入以下代码:
    on idle
      if not soundbusy(1) then  
    --检测声音通道1,如果空闲执行以下语句
        set i=random(8)-1       
    --给i随机赋值0~7
        RandomMusic="music" & string(i)  
        puppetSound 1,RandomMusic 
    --随机播放背景音乐music0~music7
      end if
    end
    

    这样就可以实现背景音乐的连续播放了,而且是在music0~music7之间随机播放。
  • 解决方法二、使用MIAW。
    首先新建一个影片,命名为soundplay.dir,导入背景音乐文件,然后将演员名命名为music0~music7,然后在剪辑室(score)双击帧脚本通道,输入以下代码:
    on exitFrame me
      if not(soundBusy(1)) then 
        soundmember = "music"& random(8)-1  
    --随机播放背景音乐
        sound(1).play(member (soundmember))
      end if
       go the frame  
    end
    

    此处与方法一相比,行为主体没有变化,只是其句柄不一样,此处是放在On exitFrame中。
    然后新建一个影片,命名为main.dir,并新建一个影片剧本,输入以下代码:
    global miaw
    on preparemovie
      miaw = window("soundplay")  
    --新建一个window,标题名为soundplay,保存在全局变量miaw中
      miaw.filename = "soundplay"  
    --子窗口的文件名为soundplay.dir
      miaw.visible = false			
    --设置子窗口为不可见
    end preparemovie 
    

    只要不forget window,背景音乐一直存在并且连续,但是要记住,在关闭背景音乐或者退出影片之前,要用miaw.forget()命令来关闭子窗口。
  • 0

    评论Comments

    日志分类
    首页[38]
    DirectorFAQ[9]
    学习笔记[14]
    c语言[3]
    生活碎片[11]
    关于xiaoma[1]