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

Project1

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

[已经解决] 如何判定角色受伤害?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
26 小时
注册时间
2012-5-4
帖子
351
跳转到指定楼层
1
发表于 2012-5-5 16:40:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很好奇。
因为居然角色死亡时能更改战斗图形,那么受伤也应该可以更改战斗图形吧。
所以请教一下这个问题。

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

2
发表于 2012-5-5 17:08:38 | 只看该作者
本帖最后由 天使喝可乐 于 2012-5-5 17:09 编辑

搜索就能找到……
Game_Battler 3里 78行
    # 命中的情况下
    if hit_result == true
      # 状态冲击解除
      remove_states_shock
      # HP 的伤害计算
      self.hp -= self.damage
在这里修改战斗图形就可以了……可以加上当HP小于多少时战斗图是什么 一类的 记得回血后加上战斗图还原
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
187 小时
注册时间
2006-9-3
帖子
175
3
发表于 2012-5-5 17:21:31 | 只看该作者
Scene_Battle 4的428行到434行改成这样
  1. # 显示伤害
  2.     for target in @target_battlers
  3.       if target.damage != nil
  4.         target.damage_pop = true
  5.          if target.is_a?(Game_Actor)
  6.                                      #这里更改战斗图形
  7.            end
  8.       end
  9.     end
复制代码
...........
回复

使用道具 举报

Lv2.观梦者

仙木精灵

梦石
0
星屑
651
在线时间
215 小时
注册时间
2012-4-16
帖子
502
4
发表于 2012-5-5 17:23:20 | 只看该作者
对于默认脚本全局搜索 【hp -=】,里边属于Game_Battler的是战斗时攻击、特技、物品、连续伤害(如中毒)等的伤害处理,
Interper的是事件指令进行伤害,如果乃用了有关事件指令造成伤害的类似战斗特效,那这里也是伤害触发点。
试试这个脚本吧!
  1. #===========================================================================
  2. #动态伤害效果加强版
  3. #原作者:柳柳
  4. #加强:sdxsdx
  5. #加了震动功能,仿GBA。
  6. #我总觉得有点怪怪的(汗|||)
  7. #===========================================================================

  8. module RPG
  9. class Sprite < ::Sprite
  10.   def initialize(viewport = nil)
  11.     super(viewport)
  12.     @flash_shake = 0
  13.     @_whiten_duration = 0
  14.     @_appear_duration = 0
  15.     @_escape_duration = 0
  16.     @_collapse_duration = 0
  17.     @_damage_duration = 0
  18.     @_animation_duration = 0
  19.     @_blink = false
  20.   end
  21.   def animation_process_timing(timing, hit)
  22.     if (timing.condition == 0) or
  23.        (timing.condition == 1 and hit == true) or
  24.        (timing.condition == 2 and hit == false)
  25.       if timing.se.name != ""
  26.         se = timing.se
  27.         Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  28.       end
  29.       case timing.flash_scope
  30.       when 1
  31.         self.flash(timing.flash_color, timing.flash_duration * 2)
  32.         @flash_shake_switch = true
  33.         @flash_shake = 10
  34.       when 2
  35.         if self.viewport != nil
  36.           self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  37.         end
  38.       when 3
  39.         self.flash(nil, timing.flash_duration * 2)
  40.       end
  41.     end
  42.   end
  43. end
  44. end
  45. #==============================================================================
  46. # ■ Sprite_Battler
  47. #------------------------------------------------------------------------------
  48. #  战斗显示用活动块。Game_Battler 类的实例监视、
  49. # 活动块的状态的监视。
  50. #==============================================================================

  51. class Sprite_Battler < RPG::Sprite
  52. #--------------------------------------------------------------------------
  53. # ● 初始化对像
  54. #     viewport : 显示端口
  55. #     battler  : 战斗者 (Game_Battler)
  56. #--------------------------------------------------------------------------
  57. def initialize(viewport, battler = nil)
  58.   super(viewport)
  59.   @battler = battler
  60.   @battler_visible = false
  61.   @flash_shake_switch = true
  62. end
  63. #--------------------------------------------------------------------------
  64. # ● 刷新画面
  65. #--------------------------------------------------------------------------
  66. def update
  67.   super
  68.   # 战斗者为 nil 的情况下
  69.   if @battler == nil
  70.     self.bitmap = nil
  71.     loop_animation(nil)
  72.     return
  73.   end
  74.   # 文件名和色相与当前情况有差异的情况下
  75.   if @battler.battler_name != @battler_name or
  76.      @battler.battler_hue != @battler_hue
  77.     # 获取、设置位图
  78.     @battler_name = @battler.battler_name
  79.     @battler_hue = @battler.battler_hue
  80.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  81.     @width = bitmap.width
  82.     @height = bitmap.height
  83.     self.ox = @width / 2
  84.     self.oy = @height
  85.     # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  86.     if @battler.dead? or @battler.hidden
  87.       self.opacity = 0
  88.     end
  89.   end
  90.   # 动画 ID 与当前的情况有差异的情况下
  91.   if @battler.damage == nil and
  92.      @battler.state_animation_id != @state_animation_id
  93.     @state_animation_id = @battler.state_animation_id
  94.     loop_animation($data_animations[@state_animation_id])
  95.   end
  96.   # 应该被显示的角色的情况下
  97.   if @battler.is_a?(Game_Actor) and @battler_visible
  98.     # 不是主状态的时候稍稍降低点透明度
  99.     if $game_temp.battle_main_phase
  100.       self.opacity += 3 if self.opacity < 255
  101.     else
  102.       self.opacity -= 3 if self.opacity > 207
  103.     end
  104.   end
  105.   # 明灭
  106.   if @battler.blink
  107.     blink_on
  108.   else
  109.     blink_off
  110.   end
  111.   # 不可见的情况下
  112.   unless @battler_visible
  113.     # 出现
  114.     if not @battler.hidden and not @battler.dead? and
  115.        (@battler.damage == nil or @battler.damage_pop)
  116.       appear
  117.       @battler_visible = true
  118.     end
  119.   end
  120.   # 可见的情况下
  121.   if @battler_visible
  122.     # 逃跑
  123.     if @battler.hidden
  124.       $game_system.se_play($data_system.escape_se)
  125.       escape
  126.       @battler_visible = false
  127.     end
  128.     # 白色闪烁
  129.     if @battler.white_flash
  130.       whiten
  131.       @battler.white_flash = false
  132.     end
  133.     # 动画
  134.     if @battler.animation_id != 0
  135.       animation = $data_animations[@battler.animation_id]
  136.       animation(animation, @battler.animation_hit)
  137.       @battler.animation_id = 0
  138.     end
  139.     # 伤害
  140.     if @battler.damage_pop
  141.       damage(@battler.damage, @battler.critical)
  142.       @battler.damage = nil
  143.       @battler.critical = false
  144.       @battler.damage_pop = false
  145.     end
  146.     # korapusu
  147.     if @battler.damage == nil and @battler.dead?
  148.       if @battler.is_a?(Game_Enemy)
  149.         $game_system.se_play($data_system.enemy_collapse_se)
  150.       else
  151.         $game_system.se_play($data_system.actor_collapse_se)
  152.       end
  153.       collapse
  154.       @battler_visible = false
  155.     end
  156.   end
  157.   # 设置活动块的坐标
  158.   if @flash_shake_switch == true
  159.     self.x = @battler.screen_x
  160.     self.y = @battler.screen_y
  161.     self.z = @battler.screen_z
  162.     @flash_shake_switch = false
  163.   end
  164.   if @flash_shake != 0
  165.     @battler.battler_name = @battler.battler_name + "_on_hit" if [email protected]_name[/_on_hit/]
  166.     @flash_shake -= 1
  167.   else   
  168.     @battler.battler_name = @battler.battler_name.split("_on_hit")[0]
  169.   end
  170. end
  171. end
  172. class Game_Battler
  173.   attr_accessor   :battler_name
  174. end
复制代码
再在Graphics/Battlers加入战斗者_on_hit命名的文件
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 00:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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