查看: 2282|回复: 6

[已经解决] 战斗中无法实现根据HP自由切换BGM

[复制链接]
梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
回帖
491
发表于 2015-1-9 10:25:32 | 显示全部楼层 |阅读模式

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

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

×
试验了三个小时了,公共事件里把HP代入角色HP,MAXHP代入角色MAXHP,然后用MAXHP\HP,得到比值,比如得到后的MAXHP大于5,就是血量小于20%。战斗事件条件分歧,切换BGM.小于5,就是大于20%,切换BGM。
理论上这些是行得通的,但是会非常卡不说,基本上还判定不了,感觉战斗事件里有些不一样。

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 手动认可奖励

查看全部评分

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
回帖
79
发表于 2015-1-9 18:47:36 | 显示全部楼层
“基本上还判定不了”是什么意思?是说背景音乐确实换了,但换的时机与自己想要的有偏差,还是没能成功切换?
回复

使用道具 举报

梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
回帖
491
 楼主| 发表于 2015-1-9 19:29:31 来自手机 | 显示全部楼层
换的不对
回复

使用道具 举报

梦石
0
星屑
50
在线时间
206 小时
注册时间
2014-2-8
回帖
378
发表于 2015-1-9 22:39:22 | 显示全部楼层
如果卡就做移动时判断一次那么简单呗
刚接触RPG的新人们裤艾来这里!在这里能够帮助你们提高自身的能力,让大家来帮助每个人实现自己的创意、构想!
也许你只是正在看RPG教程的新人,或者是正在努力学着制作自己的RPG的制作者,或者是狂热的RPG游戏喜爱者,
但都不重要!
加入我们,我们会帮助你实现梦想,或者帮助你更好的运用RPG并且创造个人的一片天地!周末我们会不定时间开放RM技术讨论活动或者RM经验交流课!
加入我们,我们愿意与你共同创造奇迹,共同进步!
QQ群号:329443038  
或者联系QQ:573932914
我们和你站在同一线!
要求只有:常能上线
我们会用十分的热情接纳你!
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-1-10 08:36:02 | 显示全部楼层
本帖最后由 taroxd 于 2015-1-10 08:41 编辑

完全脱离事件,直接在 Scene 里面更新的时候做就可以了

思路大致是这样的:
[pre lang="ruby" line="1"]
class Scene_Battle
  alias_method :update_20140110, :update
  def update
    update_20140110

    # 如果已经更换了 BGM,就什么都不做
    return if @bgm_changed

    # 获取队长
    actor = $game_party.actors.first

    if actor.max_hp / actor.hp > 5
      # TODO: stop bgm and play new bgm
      @bgm_changed = true
    end
  end
end[/pre]

点评

好像还是没办法实现自由变化,一旦满足了低于20%,高于20%的时候也变不回来了,代码在楼下  发表于 2015-1-10 10:57
回复

使用道具 举报

梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
回帖
491
 楼主| 发表于 2015-1-10 10:56:27 | 显示全部楼层
$bgm_changed = "Audio/BGM/XXXX"
$bgm_changed2 = "Audio/BGM/XXXX"
class Scene_Battle
  alias_method :update_20140110, :update
  def update
    update_20140110

    # 如果已经更换了 BGM,就什么都不做
    return if @bgm_changed

    # 获取队长
    actor = $game_party.actors.first

    if actor.maxhp / actor.hp > 5
      # TODO: stop bgm and play new bgm
      @bgm_changed = true
      @bgm_changed2 = false
      Audio.bgm_play($bgm_changed)
    else
      @bgm_changed2 = true
      @bgm_changed = false
      Audio.bgm_play($bgm_changed2)
    end
  end
end
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-1-10 11:11:37 | 显示全部楼层
本帖最后由 taroxd 于 2015-1-10 11:18 编辑
飞火流萤 发表于 2015-1-10 10:56
$bgm_changed = "Audio/BGM/XXXX"
$bgm_changed2 = "Audio/BGM/XXXX"
class Scene_Battle


我写的时候就没有考虑变回来。如果要变回来的话,上面的逻辑就有点问题。

考虑到重复播放同一个 BGM 并不会从头播放,所以要随时变化的话就更简单了:

[pre lang="ruby" line="1"]
class Scene_Battle
  alias_method :update_20140110, :update
  def update
    update_20140110
    actor = $game_party.actors.first
    Audio.bgm_play(actor.max_hp / actor.hp > 5 ? "Audio/BGM/XXXX" : "Audio/BGM/XXXX")
  end
end[/pre]

点评

“可以改成 max_hp / 5 > hp ”这个你好机智啊,我还想了半天  发表于 2015-1-10 17:38
哦哦~~  发表于 2015-1-10 17:36
那个除零错误很好解决,可以改成 max_hp / 5 > hp ; 逃跑的那些东西需要你自己理解场景的定义了,我完全不知道 XP 的脚本是怎么写的  发表于 2015-1-10 17:35
还有hp为0的时候也会报错  发表于 2015-1-10 17:04
有木有办法在选择逃跑的时候,停止bgm,我用了$scene = Scene_Map.new Audio.bgm_stop,但是一进战斗就退出了,差一点点  发表于 2015-1-10 17:02

评分

参与人数 2星屑 +10 梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案
飞火流萤 + 10 塞糖

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部