Project1

标题: 关于战斗中播放受击音效的问题 [打印本页]

作者: saterick    时间: 2009-11-4 22:46
标题: 关于战斗中播放受击音效的问题
本帖最后由 saterick 于 2009-11-4 23:10 编辑

简单的说,就是实现角色挨打时惨叫一声(真不人道-   -|||,但为了临场感,大家都向着夕阳奔跑吧!)翻了翻老帖,似乎这个问题没有被真正解决过,于是厚脸爬出来请教高手。
最通常的思路是先if target.is_a?(Game_Actor),然后case一下被抽的角色ID,when 1 就播放便当音效1,when 2 就播放便当音效2……但这个做法有个致命问题,敌人动画播放刚开始,剑还没挨到主角,主角同学就先叫出来了。一种无比的做作……
自己所设想的最理想的状况大概是:除防御动作与伤害小于0(治疗或者无伤)以外的状况下,每次角色闪光时,先确定角色ID,之后后台算一个随机数1~5,是1的时候播放该角色受击音效1,是2的时候播放该角色受击音效2,3~5的情况什么也不做。

急盼赐教,感激万分!
作者: 后知后觉    时间: 2009-11-4 22:46
本帖最后由 后知后觉 于 2009-11-5 02:03 编辑

LS都已经把东西递到嘴边了......
SE文件夹放 角色ID_0 和 角色ID_1 的音效文件
比如 1_0  1_1  3_0  3_1

加颜色的部分是增加的内容
自己懂脚本的话还可以拓展一下
还有就是一些战斗系统和站头特效脚本里可能会修改这个东西
如果真的发生冲突了.把颜色部分帖过去就行了.不过最好是靠近后面  when 2  这行比较好.看情况而定吧- -
module RPG
  class Sprite < ::Sprite
    def animation_process_timing(timing, hit)
      if (timing.condition == 0) or
         (timing.condition == 1 and hit == true) or
         (timing.condition == 2 and hit == false)
        if timing.se.name != ""
          se = timing.se
          Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
        end
        case timing.flash_scope
        when 1
          self.flash(timing.flash_color, timing.flash_duration * 2)
          # 只对战斗画面的有效果
          return if self.class != Sprite_Battler
          # 如果是角色
          if self.battler.class == Game_Actor
            return if self.battler.damage == nil
            return if self.battler.damage.is_a?(String)
            return if self.battler.damage <= 0
            # 防御状态的判定
            if self.battler.current_action.kind == 0 and
               self.battler.current_action.basic == 1
              return
            end
            # 选择要播放的音效文件
            num = rand(5)
            # 结果大于1就什么都不做
            return if num > 1
            # 设置音效文件名并播放
            se_name = self.battler.id.to_s + "_" + num.to_s
            Audio.se_play("Audio/SE/" + se_name, 100, 100)
          end

        when 2
          if self.viewport != nil
            self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
          end
        when 3
          self.flash(nil, timing.flash_duration * 2)
        end
      end
    end
  end
end
作者: 神思    时间: 2009-11-4 23:06
闪一次就有2/5的几率惨叫?
作者: saterick    时间: 2009-11-4 23:09
嗯,差不多是这样吧,但个人觉得关键点是闪光的判断
作者: 神思    时间: 2009-11-4 23:18
RM默认有提供闪烁的方法啊...
= = 不管是XP还是VX都有的..

你搜索
animation_process_timing
作者: saterick    时间: 2009-11-5 13:40
感谢神思和后知后觉两位的解答。
补充给后来翻到帖子的同志们:如果没有使用奇怪的脚本,后知后觉那个直接复制到main前就能使用了。如果挂了彩虹神剑之类的脚本,将红色部分粘贴到“弹出伤害,权重计算”那段的最后,因为用了RETURN,小心不惨叫就不给显示伤害了……




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