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

Project1

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

关于伤害值显示的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2008-5-31
帖子
237
跳转到指定楼层
1
发表于 2008-10-14 08:05:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. #伤害值美化脚本  Beside--------------------------------------------------------
  2. #66RPG 转载请保留此信息--------------------------------------------------------
  3. class Game_Battler
  4.   attr_accessor   :hp_damage
  5.   attr_accessor   :mp_damage
  6.   attr_accessor   :damage_pop
  7.   attr_accessor   :critical
  8.   alias ini initialize
  9.   def initialize
  10.     ini
  11.     @damage_pop = false
  12.   end
  13. end

  14. class Sprite_Base
  15.   def initialize(viewport = nil)
  16.     super(viewport)
  17.     @use_sprite = true          # 活动块使用的标志
  18.     @animation_duration = 0     # 动画剩余时间
  19.     @_damage_duration = 0
  20.   end
  21.    def update
  22.     super
  23.     if @animation != nil
  24.       @animation_duration -= 1
  25.       if @animation_duration % 4 == 0
  26.         update_animation
  27.       end
  28.     end
  29.     @@animations.clear
  30.      if @_damage_duration > 0
  31.         @_damage_duration -= 1
  32.         case @_damage_duration
  33.         when 38..39
  34.           @_damage_sprite.y -= 4
  35.         when 36..37
  36.           @_damage_sprite.y -= 2
  37.         when 34..35
  38.           @_damage_sprite.y += 2
  39.         when 28..33
  40.           @_damage_sprite.y += 4
  41.         end
  42.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  43.         if @_damage_duration == 0
  44.           dispose_damage
  45.         end
  46.       end
  47.   end
  48.   def damage(value, critical)
  49.       dispose_damage                             # 释放伤害
  50.       if value.is_a?(Numeric)                    # 如果伤害值是数值
  51.         damage_string = value.abs.to_s           # 绝对值转为字符串
  52.       else
  53.         damage_string = value.to_s               # 转为字符串
  54.       end
  55.       bitmap = Bitmap.new(162, 64)               # 初始化位图
  56.       bitmap.font.name = "Arial Black"
  57.       bitmap.font.size = 23
  58.       if value.is_a?(Numeric)
  59.         damage_array = damage_string.scan(/./)   # 分割伤害值字符串
  60.         damage_x = 81 - damage_string.size * 9
  61.         if value < 0                              # 伤害值为负的情况下
  62.           rect_y = 32                            # 调用回复数字表
  63.         else
  64.           rect_y = 0                             # 调用伤害数字表
  65.         end
  66.         for char in damage_array                 # 循环伤害值字符串
  67.           number = char.to_i
  68.           bitmap.blt(damage_x, 32, Cache.picture("Damage1"), Rect.new(number * 18, rect_y, 18, 32))
  69.           damage_x += 18                         # 后移一位
  70.         end
  71.       else
  72.         if value == "Evaded"  
  73.           bitmap.blt(36, 28, Cache.picture("Damage1"), Rect.new(0, 96, 84, 32))
  74.         else
  75.           # 显示未击中图画
  76.           bitmap.blt(36, 28, Cache.picture("Damage1"), Rect.new(90, 64, 90, 32))
  77.         end
  78.       end
  79.       if critical                                # 会心一击标志打开的情况
  80.         # 显示会心一击图画
  81.         bitmap.blt(36, 0, Cache.picture("Damage1"), Rect.new(0, 64, 90, 32))
  82.       end
  83.       # 伤害值定位
  84.       @_damage_sprite = Sprite_Base.new(self.viewport)
  85.       @_damage_sprite.bitmap = bitmap
  86.       @_damage_sprite.ox = 81
  87.       @_damage_sprite.oy = 20
  88.       @_damage_sprite.x = self.x
  89.       @_damage_sprite.y = self.y - self.oy
  90.       @_damage_sprite.z = 3000
  91.       @_damage_duration = 40
  92.     end
  93.   def dispose_damage
  94.     if @_damage_sprite != nil
  95.       @_damage_sprite.bitmap.dispose
  96.       @_damage_sprite.dispose
  97.       @_damage_sprite = nil
  98.       @_damage_duration = 0
  99.     end
  100.   end
  101. end

  102. class Sprite_Battler
  103.   alias setup_new_effect_66RPG setup_new_effect
  104.   def setup_new_effect
  105.     setup_new_effect_66RPG
  106.       if @battler.damage_pop
  107.       if @battler.hp_damage != 0 and  @battler.hp_damage != nil
  108.       damage(@battler.hp_damage, @battler.critical)
  109.       end
  110.       if @battler.mp_damage != 0 and  @battler.mp_damage != nil
  111.       damage(@battler.mp_damage, @battler.critical)
  112.       end
  113.       if @battler.missed
  114.       damage("Miss", @battler.critical)
  115.       end
  116.       if @battler.evaded
  117.       damage("Evaded", @battler.critical)
  118.       end
  119.       @battler.damage_pop = false
  120.       end
  121.   end
  122. end

  123. class Scene_Battle
  124.     def display_action_effects(target, obj = nil)
  125.     unless target.skipped
  126.       line_number = @message_window.line_number
  127.       wait(10)
  128.       target.damage_pop = true if target.is_a?(Game_Enemy)              
  129.       display_critical(target, obj)
  130.       display_damage(target, obj)
  131.       display_state_changes(target, obj)
  132.       @status_window.refresh
  133.       if line_number == @message_window.line_number
  134.         display_failure(target, obj) unless target.states_active?
  135.       end
  136.       if line_number != @message_window.line_number
  137.         wait(30)
  138.       end
  139.       @message_window.back_to(line_number)
  140.     end
  141.   end
  142. end
复制代码

我用的是这个伤害显示的
然后是下面那个显血条的
问题是:每次打完,对方血条都没了才显伤害(就是显示伤害太慢了),可以加快吗?
  1. #==============================================================================
  2. # ■ Window_Base
  3. #------------------------------------------------------------------------------
  4. #  游戏中全部窗口的超级类。
  5. #==============================================================================

  6. class Window_Base < Window
  7.   #--------------------------------------------------------------------------
  8.   # ● 描绘 HP
  9.   #     enemy : 角色
  10.   #     x     : 描绘目标 X 坐标
  11.   #     y     : 描绘目标 Y 坐标
  12.   #     width : 宽
  13.   #--------------------------------------------------------------------------
  14.   def draw_enemy_hp(enemy, x, y, width = 65)
  15.     draw_actor_hp_gauge(enemy, x, y, width)
  16.     self.contents.font.color = system_color
  17.     self.contents.draw_text(x, y, 30, WLH, Vocab::hp_a)
  18.     self.contents.font.color = hp_color(enemy)
  19.     xr = x + width
  20.     self.contents.draw_text(xr - 40, y, 40, WLH, enemy.hp, 2)
  21.   end
  22. end
  23. #==============================================================================
  24. # ■ Sprite_Battler
  25. #------------------------------------------------------------------------------
  26. #  战斗显示用活动块。Game_Battler 类的实例监视、
  27. # 活动块的状态的监视、活动块状态自动变化。
  28. #==============================================================================

  29. class Sprite_Battler < Sprite_Base
  30.   #--------------------------------------------------------------------------
  31.   # ● 常量
  32.   #--------------------------------------------------------------------------
  33.   WHITEN    = 1                      # 白色闪烁 (开始行动)
  34.   BLINK     = 2                      # 闪烁 (伤害)
  35.   APPEAR    = 3                      # 出现 (出现、复活)
  36.   DISAPPEAR = 4                      # 消失 (逃走)
  37.   COLLAPSE  = 5                      # 崩溃 (不能战斗)
  38.   #--------------------------------------------------------------------------
  39.   # ● 定义实例变量
  40.   #--------------------------------------------------------------------------
  41.   attr_accessor :battler
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化对象
  44.   #     viewport : 视区
  45.   #     battler  : 战斗者 (Game_Battler)
  46.   #--------------------------------------------------------------------------
  47.   def initialize(viewport, battler = nil)
  48.     super(viewport)
  49.     @battler = battler
  50.     @battler_visible = false
  51.     @effect_type = 0            # 效果种类
  52.     @effect_duration = 0        # 效果剩余时间
  53.     if @battler.is_a?(Game_Enemy)
  54.       width = 65 + 32
  55.       height = 24 + 32
  56.       x = @battler.screen_x - width/2
  57.       y = @battler.screen_y - height/2
  58.       @enemy_hp_window = Window_Base.new(x, y, width, height)
  59.       @enemy_hp_window.opacity = 0
  60.       @enemy_hp_window.contents = Bitmap.new(width - 32, height - 32)
  61.       @enemy_hp_window.draw_enemy_hp(@battler, 0, 0, 65)
  62.     end
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 释放
  66.   #--------------------------------------------------------------------------
  67.   def dispose
  68.     if self.bitmap != nil
  69.       self.bitmap.dispose
  70.       @enemy_hp_window.dispose
  71.     end
  72.     super
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 更新画面
  76.   #--------------------------------------------------------------------------
  77.   def update
  78.     super
  79.     if @battler == nil
  80.       self.bitmap = nil
  81.     else
  82.       @use_sprite = @battler.use_sprite?
  83.       if @use_sprite
  84.         self.x = @battler.screen_x
  85.         self.y = @battler.screen_y
  86.         self.z = @battler.screen_z
  87.         update_battler_bitmap
  88.       end
  89.       setup_new_effect
  90.       update_effect
  91.       if @enemy_hp_window != nil and @old_hp != @battler.hp
  92.         @enemy_hp_window.contents.clear
  93.         @enemy_hp_window.draw_enemy_hp(@battler, 0, 0, 65)
  94.         @old_hp = @battler.hp
  95.       end
  96.     end
  97.   end
  98. end
复制代码

此贴于 2008-10-16 13:38:04 被版主八云紫提醒,请楼主看到后对本贴做出回应。
本贴由论坛斑竹八云紫结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
唉,还是没人会……
我。。不是寂寞。。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-1-4 15:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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