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

Project1

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

[已经解决] 关于战斗中播放受击音效的问题

 关闭 [复制链接]

Lv4.逐梦者

梦石
1
星屑
4954
在线时间
443 小时
注册时间
2006-1-31
帖子
1537
跳转到指定楼层
1
发表于 2009-11-4 22:46:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5星屑
本帖最后由 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的情况什么也不做。

急盼赐教,感激万分!

最佳答案

查看完整内容

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 (ti ...

Lv4.逐梦者

梦石
0
星屑
6645
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

2
发表于 2009-11-4 22:46:29 | 只看该作者
本帖最后由 后知后觉 于 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











你知道得太多了

回复

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

3
发表于 2009-11-4 23:06:34 | 只看该作者
闪一次就有2/5的几率惨叫?
-.-
回复

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
4954
在线时间
443 小时
注册时间
2006-1-31
帖子
1537
4
 楼主| 发表于 2009-11-4 23:09:36 | 只看该作者
嗯,差不多是这样吧,但个人觉得关键点是闪光的判断
回复

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

5
发表于 2009-11-4 23:18:56 | 只看该作者
RM默认有提供闪烁的方法啊...
= = 不管是XP还是VX都有的..

你搜索
animation_process_timing
-.-
回复

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
4954
在线时间
443 小时
注册时间
2006-1-31
帖子
1537
6
 楼主| 发表于 2009-11-5 13:40:33 | 只看该作者
感谢神思和后知后觉两位的解答。
补充给后来翻到帖子的同志们:如果没有使用奇怪的脚本,后知后觉那个直接复制到main前就能使用了。如果挂了彩虹神剑之类的脚本,将红色部分粘贴到“弹出伤害,权重计算”那段的最后,因为用了RETURN,小心不惨叫就不给显示伤害了……
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-11 04:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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