Project1

标题: 战斗BGM变更问题 [打印本页]

作者: letppigogo    时间: 2021-5-28 23:57
标题: 战斗BGM变更问题
本帖最后由 letppigogo 于 2021-5-29 00:17 编辑

在敌人队伍事件中添加变更BGM事件,条件0回合,距离为战斗。在事件测试中,遇到该敌人队伍时仍然会播放1秒左右的系统原战斗BGM后才变更BGM,请问是否有方法可以解决这个问题?
作者: 紫英晓狼1130    时间: 2021-5-29 21:38
本帖最后由 紫英晓狼1130 于 2021-5-29 21:47 编辑

您说的问题应该是随机战斗更改BGM
我在Scene_Map的172行增加了敌队伍ID的判断

  1.     if $game_temp.battle_troop_id == 3
  2.       $game_system.battle_bgm.name = "002-Battle02"
  3.       $game_system.bgm_play($game_system.battle_bgm)
  4.     else
  5.       # 请修改为数据库默认战斗 BGM
  6.       $game_system.battle_bgm.name = "001-Battle01"
  7.       $game_system.bgm_play($game_system.battle_bgm)
  8.     end
复制代码
使用方法在范例中有详细说明

Project1.zip

201.15 KB, 下载次数: 28


作者: letppigogo    时间: 2021-6-1 23:29
紫英晓狼1130 发表于 2021-5-29 21:38
您说的问题应该是随机战斗更改BGM
我在Scene_Map的172行增加了敌队伍ID的判断

谢谢,做了一个测试,你的脚本只适合普通战斗BGM不变的情况下使用,如果游戏中期后期普通战斗BGM进行变更的话,就会出现BUG。
其实前两天我用笨办法处理了一些,就是在所有普通战斗BGM开头加1.2秒的静音。然后将所有特殊战斗队伍里加个BGM变更。这样也算是解决了我的问题。
作者: 灯笼菜刀王    时间: 2021-6-2 11:39
本帖最后由 灯笼菜刀王 于 2021-6-2 11:45 编辑
  1. class Scene_Map
  2.   def call_battle
  3.     # 清除战斗调用标志
  4.     $game_temp.battle_calling = false
  5.     # 清除菜单调用标志
  6.     $game_temp.menu_calling = false
  7.     $game_temp.menu_beep = false
  8.     # 生成遇敌计数
  9.     $game_player.make_encounter_count
  10.     # 记忆地图 BGM 、停止 BGM
  11.     $game_temp.map_bgm = $game_system.playing_bgm
  12.     $game_system.bgm_stop
  13.     # 演奏战斗开始 SE
  14.     $game_system.se_play($data_system.battle_start_se)
  15.     # 演奏战斗 BGM
  16.     if (n = $data_troops[$game_temp.battle_troop_id].name.split(/@/)[1]) != nil
  17.       f = n.split(/,/)
  18.       bgm = RPG::AudioFile.new(f[0],(f[1]||100).to_i,(f[2]||100).to_i)
  19.     else
  20.       bgm = $game_system.battle_bgm
  21.     end
  22.     $game_system.bgm_play(bgm)
  23.     # 矫正主角姿势
  24.     $game_player.straighten
  25.     # 切换到战斗画面
  26.     $scene = Scene_Battle.new
  27.   end
  28. end
复制代码


把它塞到main前,  用法, 要改BGM的敌群名字后面加上 @文件名字,音量,节拍  符号都要用半角符号, 音量和节拍添数字,可以省略不写, 注意音乐文件名字写错找不到文件会弹错误.

栗子:  幽灵 * 2 @康定情歌                     #播放指定BGM, 音量100, 节拍100
         幽灵 * 3 @国际歌,100,150             #播放指定BGM, 音量100, 节拍150
         幽灵 * 4 @咱们工人有力量,50        #播放指定BGM, 音量50, 节拍100
         幽灵 * 5                                       #播放默认BGM
作者: letppigogo    时间: 2021-6-3 21:14
灯笼菜刀王 发表于 2021-6-2 11:39
把它塞到main前,  用法, 要改BGM的敌群名字后面加上 @文件名字,音量,节拍  符号都要用半角符号, 音量和节 ...

这个解决方案很不错,谢谢!
作者: RPGzh500223    时间: 2021-6-3 23:20
基本是4楼的思路,优点就是不用手动输入了,读取事件指令

编辑器 队伍 战斗事件页1  首个指令 【更改战斗BGM】即可;执不执行都可以
  1. class Scene_Map
  2.   def call_battle
  3.     # 清除战斗调用标志
  4.     $game_temp.battle_calling = false
  5.     # 清除菜单调用标志
  6.     $game_temp.menu_calling = false
  7.     $game_temp.menu_beep = false
  8.     # 生成遇敌计数
  9.     $game_player.make_encounter_count
  10.     # 记忆地图 BGM 、停止 BGM
  11.     $game_temp.map_bgm = $game_system.playing_bgm
  12.     $game_system.bgm_stop
  13.     # 演奏战斗开始 SE
  14.     $game_system.se_play($data_system.battle_start_se)
  15.     # 演奏战斗 BGM
  16.    
  17.     first_page = $data_troops[$game_temp.battle_troop_id].pages[0]
  18.     first_command = first_page.list[0]
  19.     if first_command != nil
  20.       if first_command.code == 132
  21.         $game_system.battle_bgm = first_command.parameters[0]
  22.       end
  23.     end
  24.     $game_system.bgm_play($game_system.battle_bgm)
  25.    
  26.     # 矫正主角姿势
  27.     $game_player.straighten
  28.     # 切换到战斗画面
  29.     $scene = Scene_Battle.new
  30.   end
  31. end
复制代码

作者: letppigogo    时间: 2021-6-4 10:51
本帖最后由 letppigogo 于 2021-6-4 21:02 编辑
RPGzh500223 发表于 2021-6-3 23:20
基本是4楼的思路,优点就是不用手动输入了,读取事件指令

编辑器 队伍 战斗事件页1  首个指令 【更改战斗B ...


这个思路也很不错,晚上回家研究一下。
作者: letppigogo    时间: 2021-6-4 21:11
本帖最后由 letppigogo 于 2021-6-4 21:14 编辑
RPGzh500223 发表于 2021-6-3 23:20
基本是4楼的思路,优点就是不用手动输入了,读取事件指令

编辑器 队伍 战斗事件页1  首个指令 【更改战斗B ...


你好,经过测试,发现战斗BGM延迟的问题是解决了,遇到特殊战斗BGM的队伍后,普通战斗的BGM就变不回来了。

相较之前菜刀王大大的方案,更加符合我随机遇到特殊战斗变更战斗BGM,战斗结束后,原战斗BGM不变的设想。
作者: RPGzh500223    时间: 2021-6-5 18:43
稍微改改不就符合你的要求了……
事件指令由【更改战斗BGM】换成 【演奏BGM】
  1. def call_battle
  2.     # 清除战斗调用标志
  3.     $game_temp.battle_calling = false
  4.     # 清除菜单调用标志
  5.     $game_temp.menu_calling = false
  6.     $game_temp.menu_beep = false
  7.     # 生成遇敌计数
  8.     $game_player.make_encounter_count
  9.     # 记忆地图 BGM 、停止 BGM
  10.     $game_temp.map_bgm = $game_system.playing_bgm
  11.     $game_system.bgm_stop
  12.     # 演奏战斗开始 SE
  13.     $game_system.se_play($data_system.battle_start_se)
  14.    
  15.     # 演奏战斗 BGM
  16.     first_page = $data_troops[$game_temp.battle_troop_id].pages[0]
  17.     if (first_command = first_page.list[0]) != nil
  18.       bgm = first_command.parameters[0] if first_command.code == 241
  19.     end
  20.     $game_system.bgm_play(bgm || $game_system.battle_bgm)
  21.    
  22.     # 矫正主角姿势
  23.     $game_player.straighten
  24.     # 切换到战斗画面
  25.     $scene = Scene_Battle.new
  26.   end
复制代码

作者: letppigogo    时间: 2021-6-5 20:43
RPGzh500223 发表于 2021-6-5 18:43
稍微改改不就符合你的要求了……
事件指令由【更改战斗BGM】换成 【演奏BGM】
...


经过测试,修改后的这个脚本又回到了最初的问题,随机遇到遇到有特殊BGM的队伍会有更换BGM的延迟。




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