查看: 1167|回复: 5

怎么实现播放BGM一遍…

  [复制链接]

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
回帖
672
发表于 2009-4-8 00:02:41 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
放一遍音乐,然后执行其他事件…貌似要用到计时器吧?不过自带的计时器很不靠谱的样子…麻烦知道的人用高精度计时器实现一下吧==那个脚本的说明我没看懂…
此贴于 2009-4-10 11:16:28 被版主darkten提醒,请楼主看到后对本贴做出回应。

PC/IOS/Android共享的RM RPG:未名大学
梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2009-4-8 17:28:57 | 显示全部楼层
这个用默认的计时器确实不合适,因为这厮是靠刷新帧数算的,窗口失去焦点后就停了
必须要高精度吗?只需要精确到秒的话,启动一个线程就足够了~
(事件脚本中也可以启动)
count = 0
timer = Thread.new {
  while count < 5
    count += 1
    sleep 1
  end
  $my_flag = true
}
这个是 5 秒后把 $my_flag 变为真,并行事件判断就行了


编辑:Thread.kill(timer)多余且有害,去掉了……
回复

使用道具 举报

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
回帖
4075
发表于 2009-4-8 17:52:21 | 显示全部楼层
以下引用紫苏于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的播放控制相关脚本……
http://rpg.blue/home.php?mod=space&uid=34951&do=blog&id=12799
回复

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2009-4-8 19:01:30 | 显示全部楼层
以下引用tommay于2009-4-8 9:52:21的发言:

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

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

使用道具 举报

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
回帖
4075
发表于 2009-4-8 19:10:10 | 显示全部楼层
以下引用紫苏于2009-4-8 11:01:30的发言:

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

期待紫苏大大能够做一个范例,这个问题我想了很久了,一直不知道该怎么做……
http://rpg.blue/home.php?mod=space&uid=34951&do=blog&id=12799
回复

使用道具 举报

梦石
0
星屑
50
在线时间
83 小时
注册时间
2006-4-4
回帖
929
发表于 2009-4-8 19:17:53 | 显示全部楼层
用SE或ME来播放BGM不就是一遍了?{/gg}之后不会重复....用计时器等久一点也不会有问题把.............
SE也可以随意停止...{/gg}
要是我我就直接用祯数来等待{/gg}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部