设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1876|回复: 6
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
帖子
593
跳转到指定楼层
1
发表于 2015-1-9 10:25:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

评分

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

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
2
发表于 2015-1-9 18:47:36 | 只看该作者
“基本上还判定不了”是什么意思?是说背景音乐确实换了,但换的时机与自己想要的有偏差,还是没能成功切换?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
帖子
593
3
 楼主| 发表于 2015-1-9 19:29:31 手机端发表。 | 只看该作者
换的不对
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2015-1-10 08:36:02 | 只看该作者
本帖最后由 taroxd 于 2015-1-10 08:41 编辑

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

思路大致是这样的:
RUBY 代码复制
  1. class Scene_Battle
  2.   alias_method :update_20140110, :update
  3.   def update
  4.     update_20140110
  5.  
  6.     # 如果已经更换了 BGM,就什么都不做
  7.     return if @bgm_changed
  8.  
  9.     # 获取队长
  10.     actor = $game_party.actors.first
  11.  
  12.     if actor.max_hp / actor.hp > 5
  13.       # TODO: stop bgm and play new bgm
  14.       @bgm_changed = true
  15.     end
  16.   end
  17. end

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
338 小时
注册时间
2014-7-15
帖子
593
6
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

7
发表于 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 并不会从头播放,所以要随时变化的话就更简单了:

RUBY 代码复制
  1. class Scene_Battle
  2.   alias_method :update_20140110, :update
  3.   def update
  4.     update_20140110
  5.     actor = $game_party.actors.first
  6.     Audio.bgm_play(actor.max_hp / actor.hp > 5 ? "Audio/BGM/XXXX" : "Audio/BGM/XXXX")
  7.   end
  8. end

点评

“可以改成 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 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 21:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表