Project1

标题: 怎么实现播放BGM一遍… [打印本页]

作者: Tabris_Air    时间: 2009-4-8 00:02
标题: 怎么实现播放BGM一遍…
放一遍音乐,然后执行其他事件…貌似要用到计时器吧?不过自带的计时器很不靠谱的样子…麻烦知道的人用高精度计时器实现一下吧==那个脚本的说明我没看懂… [LINE]1,#dddddd[/LINE]此贴于 2009-4-10 11:16:28 被版主darkten提醒,请楼主看到后对本贴做出回应。
作者: 紫苏    时间: 2009-4-8 17:28
这个用默认的计时器确实不合适,因为这厮是靠刷新帧数算的,窗口失去焦点后就停了
必须要高精度吗?只需要精确到秒的话,启动一个线程就足够了~
(事件脚本中也可以启动)
count = 0
timer = Thread.new {
  while count < 5
    count += 1
    sleep 1
  end
  $my_flag = true
}
这个是 5 秒后把 $my_flag 变为真,并行事件判断就行了


编辑:Thread.kill(timer)多余且有害,去掉了……
作者: tommay    时间: 2009-4-8 17:52
以下引用紫苏于2009-4-8 9:28:57的发言:

这个用默认的计时器确实不合适,因为这厮是靠刷新帧数算的,窗口失去焦点后就停了
必须要高精度吗?只需要精确到秒的话,启动一个线程就足够了~
(事件脚本中也可以启动)

count = 0
timer = Thread.new {
while count < 5
   count += 1
   sleep 1
end
$my_flag = true
Thread.kill(timer)
}
这个是 5 秒后把 $my_flag 变为真,并行事件判断就行了

我有一个疑问,用计时器的话需要实现对BGM的持续时间有一个确定值,这个具体怎么办?按我的理解,当BGM播放过一遍之后返回一个值,不就可以实现控制了?但是找了半天,没找到BGM的播放控制相关脚本……
作者: 紫苏    时间: 2009-4-8 19:01
以下引用tommay于2009-4-8 9:52:21的发言:

我有一个疑问,用计时器的话需要实现对BGM的持续时间有一个确定值,这个具体怎么办?按我的理解,当BGM播放过一遍之后返回一个值,不就可以实现控制了?但是找了半天,没找到BGM的播放控制相关脚本……

如果是 mp3 格式的话,可以直接从文件属性中获取持续时间…… mid 么……因为 RGSS 的 Audio 模块是异步播放的,开始播放后就继续执行程序了,所以不知道什么时候返回,除非能获取音频数据的缓冲区,判断缓冲区指针之后是否没有数据了,就知道播放完毕了~
目前只想到用 API ,新建一个线程,同步播放音频,这样就可以在音频播放完之后执行收尾操作了~
作者: tommay    时间: 2009-4-8 19:10
以下引用紫苏于2009-4-8 11:01:30的发言:

如果是 mp3 格式的话,可以直接从文件属性中获取持续时间…… mid 么……因为 RGSS 的 Audio 模块是异步播放的,开始播放后就继续执行程序了,所以不知道什么时候返回,除非能获取音频数据的缓冲区,判断缓冲区指针之后是否没有数据了,就知道播放完毕了~
目前只想到用 API ,新建一个线程,同步播放音频,这样就可以在音频播放完之后执行收尾操作了~

期待紫苏大大能够做一个范例,这个问题我想了很久了,一直不知道该怎么做……
作者: zjx2005    时间: 2009-4-8 19:17
用SE或ME来播放BGM不就是一遍了?{/gg}之后不会重复....用计时器等久一点也不会有问题把.............
SE也可以随意停止...{/gg}
要是我我就直接用祯数来等待{/gg}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1