Project1

标题: BGM [打印本页]

作者: dbshy    时间: 2008-8-17 04:29
标题: BGM
比如说现在的地图bgm音乐是1,进入战斗——战斗结束。
战斗结束之后怎么样才能让音乐1接着进入战斗之前的音乐播
放,而不是重新播放


下面是我写的脚本
game_name=".\\Game.ini"
val = "\0"*256
gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
gps.call("Game", "Title", "", val, 256, game_name)
val.delete!("\0")
title = val

fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
$hwnd = fw.call("RGSS Player", title)

$gd = Win32API.new("user32", "GetDC", "l", "l")

$wop = Win32API.new("winmm", "waveOutPause" , "l", "l")

$wor = Win32API.new("winmm", "waveOutRestart" , "l", "l")

$jb = $gd.call($hwnd)

然后在Scene_Map
unless $game_player.moving?
      # 执行各种画面的调用
      if $game_temp.battle_calling

        $wop.call($jb)

        call_battle
      elsif $game_temp.shop_calling
        call_shop
      elsif $game_temp.name_calling
        call_name
      elsif $game_temp.menu_calling
        call_menu
      elsif $game_temp.save_calling
        call_save
      elsif $game_temp.debug_calling
        call_debug
      end

最后在重新播放$wor.call($jb)

问题是可以暂停,但在重新播放的时候$wor.call($jb)时候无效
我用了P $wor.call($jb),结果弹出的值为5,为无效设备句柄
这是怎么回事?




作者: ★_茄孓    时间: 2008-8-17 04:42
你获得的是窗口句炳?
作者: 柳之一    时间: 2008-8-17 04:53
http://rpg.blue/web/htm/news649.htm

直接用这个脚本吧。背景的时候就播放。暂停,然后战斗,再重新放。

话说,为什么这个帖子会在技术区?
作者: 越前リョーマ    时间: 2008-8-17 05:00
做点华丽的效果可以用……
作者: dbshy    时间: 2008-8-17 19:40
以下引用柳之一于2008-8-16 20:53:37的发言:

http://rpg.blue/web/htm/news649.htm

直接用这个脚本吧。背景的时候就播放。暂停,然后战斗,再重新放。

话说,为什么这个帖子会在技术区?


看了下那个脚本
MS MCISENDSTRING 不支持 MIDI

作者: link006007    时间: 2008-8-18 06:53
你确定 这个API可以暂停RM的播放?
如果RM不是用这个默认API, ms不能这样写吧.还是播放是你自己另外写的?

还有.. waveOutPause传入的是音频设备句柄
DC是绘图设备句柄...

以上只是一家之辞.. 我只用过DirectSound... [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 司马睿风    时间: 2008-8-18 07:54
不懂API的飘过,查下API函数表吧,我记得技术区我有发过
作者: dbshy    时间: 2008-8-18 19:42
以下引用link006007于2008-8-17 22:53:36的发言:

你确定 这个API可以暂停RM的播放?
如果RM不是用这个默认API, ms不能这样写吧.还是播放是你自己另外写的?

还有.. waveOutPause传入的是音频设备句柄
DC是绘图设备句柄...

以上只是一家之辞.. 我只用过DirectSound...


可以暂停,但不能重新播放

另外感谢前辈的提醒,我还是用另外一种方法算了



作者: hide秀    时间: 2008-8-18 20:39
暂停。。。继续
ms不是很难
现在稍忙~一会儿帮你做做看
作者: 越前リョーマ    时间: 2008-8-18 20:59
话说ms明雷的话可以用事件做……?
作者: hide秀    时间: 2008-8-18 21:24
刚考虑了下思路
难点在于 声道
播放地图音乐是一个声道
战斗的时候 先要暂停地图音乐那个声道 然后播放战斗声道
战斗结束 要停止战斗声道 resume 地图音乐那个声道
不知道lz是不是这样考虑的。。。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 轮回者    时间: 2008-9-28 01:14
或者,换个思路?
暂停时停止播放,并记录当前播放到的位置

继续时重新播放,改回当前播放到的位置






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