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

Project1

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

调整彩虹神剑数字

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
142
在线时间
70 小时
注册时间
2006-5-14
帖子
882
跳转到指定楼层
1
发表于 2008-12-3 04:07:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
悬赏1VIP(版务交易):
    本人有一份让人改过的彩虹神剑,阴差阳错的使它数字图片显示混乱了(原因大约图片大小变了,但脚本却没改过来),现将脚本和图片上传,请好心人帮我把这个彩虹神剑改改好,让他能完全正常显示,不胜感激!(如发现有BUG的话也请改一样!)
http://rpg.blue/upload_program/d/悠哈悠哈_AAA_108676933.rar

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9448
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2008-12-3 04:12:34 | 只看该作者
那个,如果可以,就试试这个吧,基本没改的。。。。
  1. =begin
  2. ==============================================================================

  3. 彩虹神剑(伤害分段显示)显示总伤害版 v1.0b

  4. ==============================================================================

  5. 彩虹神剑 by 柳柳
  6. 显示总伤害修改 by 叶子

  7. ==============================================================================

  8. 6-20-2006 v1.0
  9. 在彩虹神剑的基础上增加了显示总伤害的功能,而且总伤害的数字是弹出伤害时逐渐增加的

  10. v1.0a
  11. 修正了显示伤害和实际伤害有差别的问题
  12. 修正了miss的情况下显示miss混乱的问题
  13. 修正了对己方技能重复显示伤害的问题
  14. 未修正播放目标动画第一帧时目标有时无端跳动的BUG

  15. v1.0b
  16. 修改了总伤害数字的位置和z坐标
  17. 未修正播放目标动画第一帧时目标有时无端跳动的BUG

  18. ==============================================================================
  19. =end
  20. # 核心的说明:
  21. # damage_pop 不再附带damage()的功能,这个放到animation里面去了

  22. module RPG
  23. #--------------------------------------------------------------------------
  24. # ● 常量设定
  25. #--------------------------------------------------------------------------
  26. # 是否显示总伤害
  27. SHOW_TOTAL_DAMAGE = true
  28. # 角色受攻击时是否跳一下
  29. BATTLER_JUMP = true

  30. class Sprite < ::Sprite
  31.    #==========================================
  32.    # 修改说明:
  33.    # @flash_shake用来制作挨打时候跳跃
  34.    # @_damage    用来记录每次打击之后弹出数字
  35.    # @_total_damage 记录总伤害
  36.    # @_total_damage_duration 总伤害持续帧
  37.    #==========================================
  38.    #alias 66RPG_rainbow_initialize : initialize
  39.    def initialize(viewport = nil)
  40.      #66RPG_rainbow_initialize(viewport)
  41.      super(viewport)
  42.      @_whiten_duration = 0
  43.      @_appear_duration = 0
  44.      @_escape_duration = 0
  45.      @_collapse_duration = 0
  46.      @_damage_duration = 0
  47.      @_animation_duration = 0
  48.      @_blink = false
  49.      # 挨打时候跳跃
  50.      @flash_shake = 0
  51.      # 伤害记录数组
  52.      @_damage = []
  53.      # 总伤害数字
  54.      @_total_damage = 0
  55.      # 总伤害持续帧
  56.      @_total_damage_duration = 0
  57.    end
  58.    def damage(value, critical)
  59.      if value.is_a?(Numeric)
  60.        damage_string = value.abs.to_s
  61.      else
  62.        damage_string = value.to_s
  63.      end
  64.      bitmap = Bitmap.new(160, 48)
  65.      bitmap.font.name = "Arial Black"
  66.      bitmap.font.size = 32
  67.      bitmap.font.color.set(0, 0, 0)
  68.      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  69.      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  70.      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  71.      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  72.      #=======================================
  73.      # 修改:颜色
  74.      #=======================================
  75.      if value.is_a?(Numeric) and value < 0
  76.        bitmap.font.color.set(176, 255, 144)
  77.      else
  78.        bitmap.font.color.set(255, 55, 55)
  79.      end
  80.      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  81.      if critical
  82.        bitmap.font.size = 20
  83.        bitmap.font.color.set(0, 0, 0)
  84.        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  85.        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  86.        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  87.        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  88.        bitmap.font.color.set(255, 255, 255)
  89.        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  90.      end
  91.      @_damage_sprite = ::Sprite.new(self.viewport)
  92.      @_damage_sprite.bitmap = bitmap
  93.      @_damage_sprite.ox = 80
  94.      @_damage_sprite.oy = 20
  95.      @_damage_sprite.x = self.x
  96.      @_damage_sprite.y = self.y - self.oy / 2
  97.      @_damage_sprite.z = 3000
  98.      @_damage_duration = 40
  99.      #=======================================
  100.      # 修改:推入新的伤害
  101.      #=======================================
  102.      @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  103.      # 总伤害处理
  104.      make_total_damage(value)
  105.    end
  106.    #--------------------------------------------------------------------------
  107.    # ● 总伤害处理
  108.    #--------------------------------------------------------------------------
  109.    def make_total_damage(value)
  110.      if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE
  111.        @_total_damage += value
  112.      else
  113.        return
  114.      end
  115.      bitmap = Bitmap.new(300, 150)
  116.      bitmap.font.name = "Arial Black"
  117.      bitmap.font.size = 48
  118.      bitmap.font.color.set(0, 0, 0)
  119.      bitmap.draw_text(+2, 12+2, 160, 36, @_total_damage.abs.to_s, 1)
  120.      if @_total_damage < 0
  121.        bitmap.font.color.set(80, 255, 00)
  122.      else
  123.        bitmap.font.color.set(255, 140, 0)
  124.      end
  125.      bitmap.draw_text(0, 12, 160, 36, @_total_damage.abs.to_s, 1)
  126.      if @_total_damage_sprite.nil?
  127.        @_total_damage_sprite = ::Sprite.new(self.viewport)
  128.        @_total_damage_sprite.ox = 80
  129.        @_total_damage_sprite.oy = 20
  130.        @_total_damage_sprite.z = 3000
  131.      end
  132.      @_total_damage_sprite.bitmap = bitmap
  133.      @_total_damage_sprite.zoom_x = 1.5
  134.      @_total_damage_sprite.zoom_y = 1.5
  135.      @_total_damage_sprite.x = self.x
  136.      @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  137.      @_total_damage_sprite.z = 3001
  138.      @_total_damage_duration = 80
  139.    end
  140.    def animation(animation, hit, battler_damage="", battler_critical=false)
  141.      dispose_animation      
  142.      #=======================================
  143.      # 修改:记录伤害和critical
  144.      #=======================================
  145.      @battler_damage = battler_damage
  146.      @battler_critical = battler_critical
  147.      @_animation = animation
  148.      return if @_animation == nil
  149.      @_animation_hit = hit
  150.      @_animation_duration = @_animation.frame_max
  151.      animation_name = @_animation.animation_name
  152.      animation_hue = @_animation.animation_hue
  153.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  154.      #=======================================
  155.      # 修改:计算总闪光权限值
  156.      #=======================================
  157.      for timing in @_animation.timings
  158.        quanzhong = animation_process_timing(timing, @_animation_hit,true)
  159.        @all_quanzhong += quanzhong
  160.        # 记录最后一次闪光
  161.        @_last_frame = timing.frame if quanzhong != 0
  162.      end      
  163.      if @@_reference_count.include?(bitmap)
  164.        @@_reference_count[bitmap] += 1
  165.      else
  166.        @@_reference_count[bitmap] = 1
  167.      end
  168.      #=======================================
  169.      # 修改:行动方动画不显示伤害
  170.      #=======================================
  171.      if $scene.is_a?(Scene_Battle)
  172.        if $scene.animation1_id == @battler.animation_id
  173.          @battler_damage = ""
  174.        end
  175.      end
  176.      @_animation_sprites = []
  177.      if @_animation.position != 3 or not @@_animations.include?(animation)
  178.        for i in 0..15
  179.          sprite = ::Sprite.new(self.viewport)
  180.          sprite.bitmap = bitmap
  181.          sprite.visible = false
  182.          @_animation_sprites.push(sprite)
  183.        end
  184.        unless @@_animations.include?(animation)
  185.          @@_animations.push(animation)
  186.        end
  187.      end
  188.      update_animation
  189.    end
  190.    #=======================================
  191.    # 修改:更换清除伤害的算法,以防万一
  192.    #       本内容在脚本中没有使用过
  193.    #=======================================
  194.    def dispose_damage
  195.      for damage in @_damage.reverse
  196.        damage[0].bitmap.dispose
  197.        damage[0].dispose
  198.        @_damage.delete(damage)
  199.      end
  200.      @_total_damage = 0
  201.      @_last_frame = -1
  202.      if @_total_damage_sprite != nil
  203.        @_total_damage_duration = 0
  204.        @_total_damage_sprite.bitmap.dispose
  205.        @_total_damage_sprite.dispose
  206.        @_total_damage_sprite = nil
  207.      end
  208.    end
  209.    def dispose_animation
  210.      #=======================================
  211.      # 修改:清除记录的伤害,清除权重记录
  212.      #=======================================
  213.      @battler_damage = nil
  214.      @battler_critical = nil
  215.      @all_quanzhong = 1
  216.      @_total_damage = 0
  217.      @_last_frame = -1
  218.      if @_animation_sprites != nil
  219.        sprite = @_animation_sprites[0]
  220.        if sprite != nil
  221.          @@_reference_count[sprite.bitmap] -= 1
  222.          if @@_reference_count[sprite.bitmap] == 0
  223.            sprite.bitmap.dispose
  224.          end
  225.        end
  226.        for sprite in @_animation_sprites
  227.          sprite.dispose
  228.        end
  229.        @_animation_sprites = nil
  230.        @_animation = nil
  231.      end
  232.    end
  233.    def update
  234.      super
  235.      if @_whiten_duration > 0
  236.        @_whiten_duration -= 1
  237.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  238.      end
  239.      if @_appear_duration > 0
  240.        @_appear_duration -= 1
  241.        self.opacity = (16 - @_appear_duration) * 16
  242.      end
  243.      if @_escape_duration > 0
  244.        @_escape_duration -= 1
  245.        self.opacity = 256 - (32 - @_escape_duration) * 10
  246.      end
  247.      if @_collapse_duration > 0
  248.        @_collapse_duration -= 1
  249.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  250.      end
  251.      #=======================================
  252.      # 修改:更新算法,更新弹出
  253.      #=======================================
  254.      if @_damage_duration > 0
  255.        @_damage_duration -= 1
  256.        for damage in @_damage
  257.          damage[0].x = self.x + self.viewport.rect.x -
  258.                        self.ox + self.src_rect.width / 2 +
  259.                        (40 - damage[1]) * damage[3] / 10
  260.          damage[0].y -= damage[4]+damage[1]/10
  261.          damage[0].opacity = damage[1]*20
  262.          damage[1] -= 1
  263.          if damage[1]==0
  264.            damage[0].bitmap.dispose
  265.            damage[0].dispose
  266.            @_damage.delete(damage)
  267.            next
  268.          end
  269.        end
  270.      end
  271.      #=======================================
  272.      # 添加:弹出总伤害
  273.      #=======================================
  274.      if @_total_damage_duration > 0
  275.        @_total_damage_duration -= 1
  276.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  277.        if @_total_damage_sprite.zoom_x > 1.0
  278.          @_total_damage_sprite.zoom_x -= 0.05
  279.        end
  280.        if @_total_damage_sprite.zoom_y > 1.0
  281.          @_total_damage_sprite.zoom_y -= 0.05
  282.        end
  283.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  284.        if @_total_damage_duration <= 0
  285.          @_total_damage = 0
  286.          @_total_damage_duration = 0
  287.          @_total_damage_sprite.bitmap.dispose
  288.          @_total_damage_sprite.dispose
  289.          @_total_damage_sprite = nil
  290.        end
  291.      end
  292.      #=======================================
  293.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  294.        @_animation_duration -= 1
  295.        update_animation
  296.      end
  297.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  298.        update_loop_animation
  299.        @_loop_animation_index += 1
  300.        @_loop_animation_index %= @_loop_animation.frame_max
  301.      end
  302.      if @_blink
  303.        @_blink_count = (@_blink_count + 1) % 32
  304.        if @_blink_count < 16
  305.          alpha = (16 - @_blink_count) * 6
  306.        else
  307.          alpha = (@_blink_count - 16) * 6
  308.        end
  309.        self.color.set(255, 255, 255, alpha)
  310.      end
  311.      @@_animations.clear
  312.    end
  313.    def update_animation
  314.      if @_animation_duration > 0
  315.        frame_index = @_animation.frame_max - @_animation_duration
  316.        cell_data = @_animation.frames[frame_index].cell_data
  317.        position = @_animation.position
  318.        animation_set_sprites(@_animation_sprites, cell_data, position)
  319.        #=======================================
  320.        # 修改:弹出伤害,权重计算
  321.        #=======================================
  322.        for timing in @_animation.timings
  323.          if timing.frame == frame_index
  324.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  325.            #p t,"当前权重", @all_quanzhong,"总权重"
  326.            if @battler_damage.is_a?(Numeric) and t != 0
  327.              t *= @battler_damage
  328.              t /= @all_quanzhong
  329.              #p t,"当前伤害",@battler_damage,"总伤害"
  330.              t = t.to_i
  331.              # 最后一次闪光的话,伤害修正
  332.              if frame_index == @_last_frame
  333.                @_total_damage = @battler_damage - t
  334.              end
  335.              #p t,@battler_damage,@all_quanzhong
  336.              damage(t,@battler_critical)
  337.            # 防止重复播放miss
  338.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  339.              damage(@battler_damage,@battler_critical)
  340.            end
  341.          end
  342.        end
  343.      else
  344.        dispose_animation
  345.      end
  346.    end
  347.    #=======================================
  348.    # 修改:敌人跳跃的功能 + 添加返回数值
  349.    #=======================================
  350.     def animation_process_timing(timing, hit,dontflash=false)
  351.       if (timing.condition == 0) or
  352.          (timing.condition == 1 and hit == true) or
  353.          (timing.condition == 2 and hit == false)
  354.         unless dontflash
  355.           if timing.se.name != ""
  356.             se = timing.se
  357.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  358.           end
  359.         end
  360.         case timing.flash_scope
  361.         when 1
  362.           unless dontflash
  363.             self.flash(timing.flash_color, timing.flash_duration * 2)
  364.             if @_total_damage >0
  365.               @flash_shake_switch = true
  366.               @flash_shake = 10
  367.             end
  368.           end
  369.           return timing.flash_color.alpha * timing.flash_duration
  370.         when 2
  371.           unless dontflash
  372.             if self.viewport != nil
  373.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  374.               return timing.flash_color.alpha * timing.flash_duration
  375.             end
  376.           end
  377.         when 3
  378.           unless dontflash
  379.             self.flash(nil, timing.flash_duration * 2)
  380.           end
  381.           return timing.flash_color.alpha * timing.flash_duration
  382.         end
  383.       end      
  384.       return 0
  385.     end   
  386. end
  387. end
  388. #==============================================================================
  389. # ■ Sprite_Battler
  390. #==============================================================================
  391. class Sprite_Battler < RPG::Sprite
  392. #--------------------------------------------------------------------------
  393. # ● 初始化对像
  394. #    添加跳跃记录
  395. #--------------------------------------------------------------------------
  396. def initialize(viewport, battler = nil)
  397.   super(viewport)
  398.   @battler = battler
  399.   @battler_visible = false
  400.   @flash_shake_switch = true
  401. end
  402. #--------------------------------------------------------------------------
  403. # ● 刷新画面
  404. #    增添跳跃功能
  405. #--------------------------------------------------------------------------
  406. def update
  407.   super
  408.   # 战斗者为 nil 的情况下
  409.   if @battler == nil
  410.     self.bitmap = nil
  411.     loop_animation(nil)
  412.     return
  413.   end
  414.   # 文件名和色相与当前情况有差异的情况下
  415.   if @battler.battler_name != @battler_name or
  416.      @battler.battler_hue != @battler_hue
  417.     # 获取、设置位图
  418.     @battler_name = @battler.battler_name
  419.     @battler_hue = @battler.battler_hue
  420.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  421.     @width = bitmap.width
  422.     @height = bitmap.height
  423.     self.ox = @width / 2
  424.     self.oy = @height
  425.     # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  426.     if @battler.dead? or @battler.hidden
  427.       self.opacity = 0
  428.     end
  429.   end
  430.   # 动画 ID 与当前的情况有差异的情况下
  431.   if @battler.damage == nil and
  432.      @battler.state_animation_id != @state_animation_id
  433.     @state_animation_id = @battler.state_animation_id
  434.     loop_animation($data_animations[@state_animation_id])
  435.   end
  436.   # 应该被显示的角色的情况下
  437.   if @battler.is_a?(Game_Actor) and @battler_visible
  438.     # 不是主状态的时候稍稍降低点透明度
  439.     if $game_temp.battle_main_phase
  440.       self.opacity += 3 if self.opacity < 255
  441.     else
  442.       self.opacity -= 3 if self.opacity > 207
  443.     end
  444.   end
  445.   # 明灭
  446.   if @battler.blink
  447.     blink_on
  448.   else
  449.     blink_off
  450.   end
  451.   # 不可见的情况下
  452.   unless @battler_visible
  453.     # 出现
  454.     if not @battler.hidden and not @battler.dead? and
  455.        (@battler.damage == nil or @battler.damage_pop)
  456.       appear
  457.       @battler_visible = true
  458.     end
  459.   end
  460.   # 可见的情况下
  461.   if @battler_visible
  462.     # 逃跑
  463.     if @battler.hidden
  464.       $game_system.se_play($data_system.escape_se)
  465.       escape
  466.       @battler_visible = false
  467.     end
  468.     # 白色闪烁
  469.     if @battler.white_flash
  470.       whiten
  471.       @battler.white_flash = false
  472.     end
  473.     # 动画
  474.     if @battler.animation_id != 0
  475.       animation = $data_animations[@battler.animation_id]
  476.       animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  477.       @battler.animation_id = 0
  478.     end
  479.     # 伤害
  480.     if @battler.damage_pop
  481.       @battler.damage = nil
  482.       @battler.critical = false
  483.       @battler.damage_pop = false
  484.     end
  485.     # korapusu
  486.     if @battler.damage == nil and @battler.dead?
  487.       if @battler.is_a?(Game_Enemy)
  488.         $game_system.se_play($data_system.enemy_collapse_se)
  489.       else
  490.         $game_system.se_play($data_system.actor_collapse_se)
  491.       end
  492.       collapse
  493.       @battler_visible = false
  494.     end
  495.   end
  496.   # 设置活动块的坐标
  497.   if @flash_shake_switch == true
  498.     self.x = @battler.screen_x
  499.     self.y = @battler.screen_y
  500.     self.z = @battler.screen_z
  501.     @flash_shake_switch = false
  502.   end
  503.   if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  504.     case @flash_shake
  505.     when 9..10
  506.       self.x = @battler.screen_x
  507.       self.y -=4
  508.       self.z = @battler.screen_z
  509.     when 6..8
  510.       self.x = @battler.screen_x
  511.       self.y -=2
  512.       self.z = @battler.screen_z
  513.     when 3..5
  514.       self.x = @battler.screen_x
  515.       self.y +=2
  516.       self.z = @battler.screen_z
  517.     when 2
  518.       self.x = @battler.screen_x
  519.       self.y += 4
  520.       self.z = @battler.screen_z
  521.     when 1
  522.       self.x = @battler.screen_x
  523.       self.y = @battler.screen_y
  524.       self.z = @battler.screen_z
  525.     end
  526.     @flash_shake -= 1
  527.   end
  528. end
  529. end

  530. #==============================================================================
  531. # ■ Scene_Battle
  532. #------------------------------------------------------------------------------
  533. #  处理战斗画面的类。
  534. #==============================================================================

  535. class Scene_Battle
  536. #--------------------------------------------------------------------------
  537. # ● 定义实例变量
  538. #--------------------------------------------------------------------------
  539. attr_reader   :animation1_id                    # 行动方动画ID
  540. end

复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
3
发表于 2008-12-3 04:19:28 | 只看该作者
#调用SP伤害图片
bitmap.blt(damage_x, 32, RPG::Cache.picture("spDamage"),
           Rect.new(number * 14, rect_y, 14, 32))
          #调用HP伤害图片
        else
bitmap.blt(damage_x, 32, RPG::Cache.picture("Damage"),
           Rect.new(number * 14, rect_y,14, 32))

是不是因为图片数字小的缘故 觉得 字漂地有些怪异= =|
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
70 小时
注册时间
2006-5-14
帖子
882
4
 楼主| 发表于 2008-12-3 04:59:27 | 只看该作者
这个彩虹神剑是为我的工程特意改的,如果没有更好的我不想用别的了.至于乱翻........我就是要你们改好这些东西吧!我看不懂也不会改,所以就麻烦你们了,
应该是图片大小已不是原来的大小造成的!所以请高人重新调整吧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
70 小时
注册时间
2006-5-14
帖子
882
5
 楼主| 发表于 2008-12-3 05:19:33 | 只看该作者
redant
好象没你说的好么容易吧...........我去试试看..........{/pz}
试了,不行,还有问题的说,不信你自己试试!比如MISS显示.总之光改这个好象不行.你应该明白我的的脚本文盲程度!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
6
发表于 2008-12-3 06:21:25 | 只看该作者



这是你的damage图片140 按14改的



这是我的图片300 按30 改的

sp总伤害 是200 找到 bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("sp总伤害"),
          Rect.new(number * 25, rect_y, 25, 32))
把25改成20
hp一样


  1. module RPG
  2. #--------------------------------------------------------------------------
  3. # ● 常量设定
  4. #--------------------------------------------------------------------------
  5. # 是否显示总伤害
  6. SHOW_TOTAL_DAMAGE = true
  7. # 角色受攻击时是否跳一下
  8. BATTLER_JUMP = false

  9. class Sprite < ::Sprite
  10.   # 用文件名字代替实例加快搜索速度
  11.   @@_reference_count_ary = []
  12.   #==========================================
  13.   # 修改说明:
  14.   # @flash_shake用来制作挨打时候跳跃
  15.   # @_damage    用来记录每次打击之后弹出数字
  16.   # @_total_damage 记录总伤害
  17.   # @_total_damage_duration 总伤害持续帧
  18.   #==========================================
  19.   alias rainbow_initialize :initialize
  20.   def initialize(viewport = nil)
  21.     # 元方法引用
  22.     rainbow_initialize(viewport)
  23.     # 挨打时候跳跃
  24.     @flash_shake = 0
  25.     # 伤害记录数组
  26.     @_damage = []
  27.     # 总伤害数字
  28.     @_total_damage = 0
  29.     # 总伤害持续帧
  30.     @_total_damage_duration = 0
  31.   end
  32.   
  33.   #--------------------------------------------------------------------------
  34.   # 图片化显示伤害
  35.   #--------------------------------------------------------------------------
  36.   def damage(value, critical)
  37.     bitmap = Bitmap.new(200, 64)
  38.     bitmap.font.name = "Arial Black"
  39.     bitmap.font.size = 18
  40.     # 伤害值是数值的情况下
  41.     if value.is_a?(Numeric)
  42.       # 伤害值为负的情况下
  43.       if value < 0
  44.         rect_y = 32# 调用回复数字表
  45.         damage_string = (-value).to_s
  46.       else
  47.         rect_y = 0 # 调用伤害数字表
  48.         damage_string = (value).to_s
  49.       end
  50.       
  51.       # 分割伤害值字符串
  52.       damage_array = damage_string.scan(/./)
  53.       damage_x = (9 - damage_string.size)* 9

  54.      # 循环伤害值字符串
  55.       damage_array.each do |char|
  56.         number = char.to_i
  57.         if $SP判定 == 2  #当伤害值为SP伤害时
  58.           #调用SP伤害图片
  59. bitmap.blt(damage_x, 32, RPG::Cache.picture("spDamage"),
  60.            Rect.new(number * 14, rect_y, 14, 50))
  61.           #调用HP伤害图片
  62.         else
  63. bitmap.blt(damage_x, 32, RPG::Cache.picture("Damage"),
  64.            Rect.new(number * 14, rect_y,14, 50))
  65.         end
  66.         # 后移一位
  67.         damage_x += 20
  68.       end
  69.     # 伤害值不是数值的情况
  70.     else
  71.       damage_string = value.to_s
  72.       # 如果伤害值不是 Miss
  73.       unless value == "Miss"
  74.         bitmap.font.color.set(0, 0, 0)
  75.         bitmap.draw_text(-1, 11, 160, 36, damage_string, 1)
  76.         #bitmap.draw_text(+1, 11, 160, 36, damage_string, 1)
  77.         #bitmap.draw_text(-1, 13, 160, 36, damage_string, 1)
  78.         #bitmap.draw_text(+1, 13, 160, 36, damage_string, 1)
  79.       # Miss 的情况下
  80.       else
  81.         # 显示未击中图画
  82.         bitmap.blt(36, 28, RPG::Cache.picture("Damage"),Rect.new(90, 64, 90, 50))
  83.       end
  84.     end
  85.     # 会心一击标志打开的情况
  86.     if critical
  87.       # 显示会心一击图画
  88.       bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
  89.     end
  90.     # 伤害值定位
  91.     @_damage_sprite = ::Sprite.new(self.viewport)
  92.     @_damage_sprite.bitmap = bitmap
  93.     @_damage_sprite.ox = 80
  94.     @_damage_sprite.oy = 20
  95.     @_damage_sprite.x = self.x
  96.     @_damage_sprite.y = self.y - self.oy / 2
  97.     @_damage_sprite.z = 3000
  98.     @_damage_duration = 40
  99.     #=======================================
  100.     # 修改:推入新的伤害
  101.     #=======================================
  102.     @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  103.     # 总伤害处理
  104.     make_total_damage(value)
  105.   end
  106.   #############################################################################
  107.   #--------------------------------------------------------------------------
  108.   # ● 总伤害处理
  109.   #--------------------------------------------------------------------------
  110.   ############################################################################
  111.   #总伤害图片化
  112.   def make_total_damage(value)
  113.     if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE  #如果总伤害数值为数字并且总伤害显示开关为真。
  114.       @_total_damage += value   
  115.       value1 = @_total_damage   #代入伤害数值
  116.       total_string = value1.abs.to_s   #转化字符串
  117.       #分割伤害数值
  118.       @_total_damage_array = total_string.scan(/./)
  119.       @_total_damage_x = (9 - total_string.size) * 9
  120.     else
  121.       return
  122.     end
  123.     ########图片尺寸以及字体
  124.     bitmap = Bitmap.new(320,82)
  125.     bitmap.font.name = "黑体"
  126.     bitmap.font.size = 32   
  127.     #################
  128.     if @_total_damage < 0   #如果总伤害小于0
  129.       rect_y = 32   #定位伤害值行数
  130.       ############处理伤害分割数字
  131.        for char in @_total_damage_array
  132.           number = char.to_i
  133.           if $SP判定 == 2  #当SP判定为2时,即显示SP恢复和伤害量
  134.             bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("sp总伤害"),
  135.             Rect.new(number * 25, rect_y, 25, 32))
  136.           else   #伤害为HP的情况下
  137.             bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("hp总伤害"),
  138.             Rect.new(number * 25, rect_y, 25, 32))
  139.           end
  140.           # 后移一位
  141.           @_total_damage_x += 25
  142.         end
  143.     else   #伤害值大于0的情况
  144.        rect_y = 0  #定位伤害值行数
  145.        #总伤害数值循环处理
  146.        for char in @_total_damage_array
  147.         number = char.to_i
  148.         if $SP判定 == 2   #当伤害为SP伤害时
  149.           bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("sp总伤害"),
  150.           Rect.new(number * 20, rect_y, 20, 32))
  151.         else  #除此以外的情况。
  152.           bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("hp总伤害"),
  153.           Rect.new(number * 20, rect_y, 0, 32))
  154.         end   
  155.         # 后移一位
  156.         @_total_damage_x += 25
  157.       end
  158.     end
  159.     if @_total_damage_sprite.nil?
  160.       @_total_damage_sprite = ::Sprite.new(self.viewport)
  161.       @_total_damage_sprite.ox = 80
  162.       @_total_damage_sprite.oy = 20
  163.       @_total_damage_sprite.z = 3000
  164.     end
  165.     @_total_damage_sprite.bitmap = bitmap
  166.     @_total_damage_sprite.zoom_x = 1.5
  167.     @_total_damage_sprite.zoom_y = 1.5
  168.     @_total_damage_sprite.x = self.x
  169.     @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  170.     @_total_damage_sprite.z = 3001
  171.     @_total_damage_duration = 80
  172.   end
  173.   ##################################################################
  174.   def animation(animation, hit, battler_damage="", battler_critical=false,battler=nil)

  175.     dispose_animation
  176.     @battler = battler
  177.     #=======================================
  178.     # 修改:记录伤害和critical
  179.     #=======================================
  180.     @battler_damage = battler_damage
  181.     @battler_critical = battler_critical
  182.     @_animation = animation
  183.     return if @_animation == nil
  184.     @_animation_hit = hit
  185.     @_animation_duration = @_animation.frame_max
  186.     animation_name = @_animation.animation_name
  187.     animation_hue = @_animation.animation_hue
  188.     bitmap = RPG::Cache.animation(animation_name, animation_hue)
  189.     #=======================================
  190.     # 修改:计算总闪光权限值
  191.     #=======================================
  192.     for timing in @_animation.timings
  193.       quanzhong = animation_process_timing(timing, @_animation_hit,true)
  194.       quanzhong = 0
  195.       @all_quanzhong += quanzhong
  196.       # 记录最后一次闪光
  197.       @_last_frame = timing.frame if quanzhong != 0
  198.     end     
  199.     if @@_reference_count.include?(bitmap)
  200.       @@_reference_count[bitmap] += 1
  201.     else
  202.       @@_reference_count[bitmap] = 1
  203.     end
  204.     #=======================================
  205.     # 修改:行动方动画不显示伤害
  206.     #=======================================
  207.     if $scene.is_a?(Scene_Battle)
  208.       if $scene.animation1_id == @battler.animation_id
  209.         @battler_damage = ""
  210.       end
  211.     end
  212.     @_animation_sprites = []
  213.     if @_animation.position != 3 or not @@_animations.include?(animation)
  214.       15.times do
  215.         sprite = ::Sprite.new(self.viewport)
  216.         sprite.bitmap = bitmap
  217.         sprite.visible = false
  218.         @_animation_sprites.push(sprite)
  219.       end
  220.       unless @@_animations.include?(animation)
  221.         @@_animations.push(animation)
  222.       end
  223.     end
  224.     update_animation
  225.   end
  226.   #=======================================
  227.   # 修改:更换清除伤害的算法,以防万一
  228.   #       本内容在脚本中没有使用过
  229.   #=======================================
  230.   def dispose_damage
  231.     for damage in @_damage.reverse
  232.       damage[0].bitmap.dispose
  233.       damage[0].dispose
  234.       @_damage.delete(damage)
  235.     end
  236.     @_total_damage = 0
  237.     @_last_frame = -1
  238.     if @_total_damage_sprite != nil
  239.       @_total_damage_duration = 0
  240.       @_total_damage_sprite.bitmap.dispose
  241.       @_total_damage_sprite.dispose
  242.       @_total_damage_sprite = nil
  243.     end
  244.   end
  245.   def dispose_animation
  246.     #=======================================
  247.     # 修改:清除记录的伤害,清除权重记录
  248.     #=======================================
  249.     @battler_damage = nil
  250.     @battler_critical = nil
  251.     @all_quanzhong = 1
  252.     @_total_damage = 0
  253.     @_last_frame = -1
  254.     if @_animation_sprites != nil
  255.       sprite = @_animation_sprites[0]
  256.       if sprite != nil
  257.         @@_reference_count[sprite.bitmap] -= 1
  258.         if @@_reference_count[sprite.bitmap] == 0
  259.           sprite.bitmap.dispose
  260.         end
  261.       end
  262.       for sprite in @_animation_sprites
  263.         sprite.dispose
  264.       end
  265.       @_animation_sprites = nil
  266.       @_animation = nil
  267.     end
  268.   end
  269.    def update
  270.      super
  271.      if @_whiten_duration > 0
  272.        @_whiten_duration -= 1
  273.        self.color.alpha = @_whiten_duration * 10 - 32
  274.      end
  275.      if @_appear_duration > 0
  276.        @_appear_duration -= 1
  277.        self.opacity = (16 - @_appear_duration) * 16
  278.      end
  279.      if @_escape_duration > 0
  280.        @_escape_duration -= 1
  281.        self.opacity = @_escape_duration * 10 - 64
  282.      end
  283.      if @_collapse_duration > 0
  284.        @_collapse_duration -= 1
  285.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  286.      end
  287.      #=======================================
  288.      # 修改:更新算法,更新弹出
  289.      #=======================================
  290.      if @_damage_duration > 0
  291.        @_damage_duration -= 1
  292.        for damage in @_damage
  293.          damage[0].x = self.x + self.viewport.rect.x -
  294.                        self.ox + self.src_rect.width / 2 +
  295.                        (4 - damage[1]/ 10) * damage[3]
  296.          damage[0].y -= damage[4]+damage[1]/10
  297.          damage[0].opacity = damage[1]*20
  298.          damage[1] -= 1
  299.          if damage[1]==0
  300.            damage[0].bitmap.dispose
  301.            damage[0].dispose
  302.            @_damage.delete(damage)
  303.            next
  304.          end
  305.        end
  306.      end
  307.      #=======================================
  308.      # 添加:弹出总伤害
  309.      #=======================================
  310.      if @_total_damage_duration > 0
  311.        @_total_damage_duration -= 1
  312.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  313.        if @_total_damage_sprite.zoom_x > 1.0
  314.          @_total_damage_sprite.zoom_x -= 0.05
  315.        end
  316.        if @_total_damage_sprite.zoom_y > 1.0
  317.          @_total_damage_sprite.zoom_y -= 0.05
  318.        end
  319.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  320.        if @_total_damage_duration <= 0
  321.          @_total_damage = 0
  322.          @_total_damage_duration = 0
  323.          @_total_damage_sprite.bitmap.dispose
  324.          @_total_damage_sprite.dispose
  325.          @_total_damage_sprite = nil
  326.        end
  327.      end
  328.      #=======================================
  329.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  330.        @_animation_duration -= 1
  331.        update_animation
  332.      end
  333.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  334.        update_loop_animation
  335.        @_loop_animation_index += 1
  336.        @_loop_animation_index %= @_loop_animation.frame_max
  337.      end
  338.      if @_blink
  339.        @_blink_count = (@_blink_count + 1) % 32
  340.        if @_blink_count < 16
  341.          alpha = (16 - @_blink_count) * 6
  342.        else
  343.          alpha = (@_blink_count - 16) * 6
  344.        end
  345.        self.color.set(255, 255, 255, alpha)
  346.      end
  347.      @@_animations.clear
  348.    end
  349.    def update_animation
  350.      if @_animation_duration > 0
  351.        frame_index = @_animation.frame_max - @_animation_duration
  352.        cell_data = @_animation.frames[frame_index].cell_data
  353.        position = @_animation.position
  354.        animation_set_sprites(@_animation_sprites, cell_data, position)
  355.        #=======================================
  356.        # 修改:弹出伤害,权重计算
  357.        #=======================================
  358.        for timing in @_animation.timings
  359.          if timing.frame == frame_index
  360.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  361.            #p t,"当前权重", @all_quanzhong,"总权重"
  362.            if @battler_damage.is_a?(Numeric) and t != 0
  363.              #p @battler_damage, t
  364.              t *= @battler_damage
  365.              t /= @all_quanzhong
  366.              t *= (rand(10)/10.0)
  367.              t = t.to_i
  368.              @_total_damage += t
  369.              #p t,@battler_damage, @_total_damage
  370.              damage(t,@battler_critical)
  371.              @battler.hp -= t
  372.              $scene.statusupdate
  373.            # 防止重复播放miss
  374.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  375.              damage(@battler_damage,@battler_critical)
  376.            end
  377.          end
  378.        end
  379.      else
  380.        dispose_animation
  381.      end
  382.    end
  383.    #=======================================
  384.    # 修改:敌人跳跃的功能 + 添加返回数值
  385.    #=======================================
  386.     def animation_process_timing(timing, hit,dontflash=false)
  387.       if (timing.condition == 0) or
  388.          (timing.condition == 1 and hit == true) or
  389.          (timing.condition == 2 and hit == false)
  390.         unless dontflash
  391.           if timing.se.name != ""
  392.             se = timing.se
  393.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  394.           end
  395.         end
  396.         case timing.flash_scope
  397.         when 1
  398.           unless dontflash
  399.             self.flash(timing.flash_color, timing.flash_duration * 2)
  400.             if @_total_damage >0
  401.               @flash_shake_switch = true
  402.               @flash_shake = 10
  403.             end
  404.           end
  405.           return timing.flash_color.alpha * timing.flash_duration
  406.         when 2
  407.           unless dontflash
  408.             if self.viewport != nil
  409.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  410.               return timing.flash_color.alpha * timing.flash_duration
  411.             end
  412.           end
  413.         when 3
  414.           unless dontflash
  415.             self.flash(nil, timing.flash_duration * 2)
  416.           end
  417.           return timing.flash_color.alpha * timing.flash_duration
  418.         end
  419.       end      
  420.       return 0
  421.     end   
  422. end
  423. end
  424. #==============================================================================
  425. # ■ Sprite_Battler
  426. #==============================================================================
  427. class Sprite_Battler < RPG::Sprite
  428. #--------------------------------------------------------------------------
  429. # ● 初始化对像
  430. #    添加跳跃记录
  431. #--------------------------------------------------------------------------
  432. def initialize(viewport, battler = nil)
  433.   super(viewport)
  434.   @battler = battler
  435.   @battler_visible = false
  436.   @flash_shake_switch = true
  437. end
  438. #--------------------------------------------------------------------------
  439. # ● 刷新画面
  440. #    增添跳跃功能
  441. #--------------------------------------------------------------------------
  442. def update
  443.   super
  444.   # 战斗者为 nil 的情况下
  445.   if @battler == nil
  446.     self.bitmap = nil
  447.     loop_animation(nil)
  448.     return
  449.   end
  450.   # 文件名和色相与当前情况有差异的情况下
  451.   if @battler.battler_name != @battler_name or
  452.      @battler.battler_hue != @battler_hue
  453.     # 获取、设置位图
  454.     @battler_name = @battler.battler_name
  455.     @battler_hue = @battler.battler_hue
  456.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  457.     @width = self.bitmap.width
  458.     @height = self.bitmap.height
  459.     self.ox = @width / 2
  460.     self.oy = @height
  461.     # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  462.     if @battler.dead? or @battler.hidden
  463.       self.opacity = 0
  464.     end
  465.   end
  466.   # 动画 ID 与当前的情况有差异的情况下
  467.   if @battler.damage == nil and
  468.      @battler.state_animation_id != @state_animation_id
  469.     @state_animation_id = @battler.state_animation_id
  470.     loop_animation($data_animations[@state_animation_id])
  471.   end
  472.   # 应该被显示的角色的情况下
  473.   if @battler.is_a?(Game_Actor) and @battler_visible
  474.     # 不是主状态的时候稍稍降低点透明度
  475.     if $game_temp.battle_main_phase
  476.       self.opacity += 3 if self.opacity < 255
  477.     else
  478.       self.opacity -= 3 if self.opacity > 207
  479.     end
  480.   end
  481.   # 明灭
  482.   if @battler.blink
  483.     blink_on
  484.   else
  485.     blink_off
  486.   end
  487.   # 不可见的情况下
  488.   unless @battler_visible
  489.     # 出现
  490.     if not @battler.hidden and not @battler.dead? and
  491.        (@battler.damage == nil or @battler.damage_pop)
  492.       appear
  493.       @battler_visible = true
  494.     end
  495.   end
  496.   # 可见的情况下
  497.   if @battler_visible
  498.     # 逃跑
  499.     if @battler.hidden
  500.       $game_system.se_play($data_system.escape_se)
  501.       escape
  502.       @battler_visible = false
  503.     end
  504.     # 白色闪烁
  505.     if @battler.white_flash
  506.       whiten
  507.       @battler.white_flash = false
  508.     end
  509.     # 动画
  510.     if @battler.animation_id != 0
  511.       animation = $data_animations[@battler.animation_id]
  512.       animation(animation, @battler.animation_hit,@battler.damage, @battler.critical,@battler)
  513.       @battler.animation_id = 0
  514.     end
  515.     # 伤害
  516.     if @battler.damage_pop
  517.       @battler.damage = nil
  518.       @battler.critical = false
  519.       @battler.damage_pop = false
  520.     end
  521.     # korapusu
  522.     if @battler.damage == nil and @battler.dead?
  523.       if @battler.is_a?(Game_Enemy)
  524.         $game_system.se_play($data_system.enemy_collapse_se)
  525.       else
  526.         $game_system.se_play($data_system.actor_collapse_se)
  527.       end
  528.       collapse
  529.       @battler_visible = false
  530.     end
  531.   end
  532.   # 设置活动块的坐标
  533.   if @flash_shake_switch == true
  534.     self.x = @battler.screen_x
  535.     self.y = @battler.screen_y
  536.     self.z = @battler.screen_z
  537.     @flash_shake_switch = false
  538.   end
  539.   if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  540.     case @flash_shake
  541.     when 9..10
  542.       self.x = @battler.screen_x
  543.       self.y -=4
  544.       self.z = @battler.screen_z
  545.     when 6..8
  546.       self.x = @battler.screen_x
  547.       self.y -=2
  548.       self.z = @battler.screen_z
  549.     when 3..5
  550.       self.x = @battler.screen_x
  551.       self.y +=2
  552.       self.z = @battler.screen_z
  553.     when 2
  554.       self.x = @battler.screen_x
  555.       self.y += 4
  556.       self.z = @battler.screen_z
  557.     when 1
  558.       self.x = @battler.screen_x
  559.       self.y = @battler.screen_y
  560.       self.z = @battler.screen_z
  561.     end
  562.     @flash_shake -= 1
  563.   end
  564. end
  565. end

  566. #==============================================================================
  567. # ■ Scene_Battle
  568. #------------------------------------------------------------------------------
  569. #  处理战斗画面的类。
  570. #==============================================================================

  571. class Scene_Battle
  572.   #--------------------------------------------------------------------------
  573.   # ● 定义实例变量
  574.   #--------------------------------------------------------------------------
  575.   attr_reader   :animation1_id                    # 行动方动画ID
  576.   def statusupdate
  577.      @status_window.refresh
  578.      Graphics.frame_reset
  579.   end
  580. end
复制代码


这是那个修改过的 你试试= =|
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
70 小时
注册时间
2006-5-14
帖子
882
7
 楼主| 发表于 2008-12-3 18:40:53 | 只看该作者
说有问题你还不信.那我给你说一下发现的几个问题吧!(同试了几下就发现的问题):
1.一眼就能看出来的:你不觉得这些数字与数字间的距离太大了吗?(这数字间的距离只要不完全碰在一起就行了)
2.你觉得这个数字显示正确吗?看一下技能的威力,怎么可能打出这种伤害值?我试了下,一个回复药能出现N十万的回复量,小刀也能打出数万伤害.........
3.总伤害(或回复)的数字呢?不是满天乱飞,就是找不到影子.........
新问题正在找,先就说出这几个问题吧!
会心一击没试过,MISS显示好象对了,不过也觉得怪怪的!
{/gg}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
8
发表于 2008-12-3 20:49:50 | 只看该作者

  1. module RPG
  2. #--------------------------------------------------------------------------
  3. # ● 常量设定
  4. #--------------------------------------------------------------------------
  5. # 是否显示总伤害
  6. SHOW_TOTAL_DAMAGE = true
  7. # 角色受攻击时是否跳一下
  8. BATTLER_JUMP = false

  9. class Sprite < ::Sprite
  10.   # 用文件名字代替实例加快搜索速度
  11.   @@_reference_count_ary = []
  12.   #==========================================
  13.   # 修改说明:
  14.   # @flash_shake用来制作挨打时候跳跃
  15.   # @_damage    用来记录每次打击之后弹出数字
  16.   # @_total_damage 记录总伤害
  17.   # @_total_damage_duration 总伤害持续帧
  18.   #==========================================
  19.   alias rainbow_initialize :initialize
  20.   def initialize(viewport = nil)
  21.     # 元方法引用
  22.     rainbow_initialize(viewport)
  23.     # 挨打时候跳跃
  24.     @flash_shake = 0
  25.     # 伤害记录数组
  26.     @_damage = []
  27.     # 总伤害数字
  28.     @_total_damage = 0
  29.     # 总伤害持续帧
  30.     @_total_damage_duration = 0
  31.   end
  32.   
  33.   #--------------------------------------------------------------------------
  34.   # 图片化显示伤害
  35.   #--------------------------------------------------------------------------
  36.   def damage(value, critical)
  37.     bitmap = Bitmap.new(200, 64)
  38.     bitmap.font.name = "Arial Black"
  39.     bitmap.font.size = 18
  40.     # 伤害值是数值的情况下
  41.     if value.is_a?(Numeric)
  42.       # 伤害值为负的情况下
  43.       if value < 0
  44.         rect_y = 32# 调用回复数字表
  45.         damage_string = (-value).to_s
  46.       else
  47.         rect_y = 0 # 调用伤害数字表
  48.         damage_string = (value).to_s
  49.       end
  50.       
  51.       # 分割伤害值字符串
  52.       damage_array = damage_string.scan(/./)
  53.       damage_x = (9 - damage_string.size)* 9

  54.      # 循环伤害值字符串
  55.       damage_array.each do |char|
  56.         number = char.to_i
  57.         if $SP判定 == 2  #当伤害值为SP伤害时
  58.           #调用SP伤害图片
  59. bitmap.blt(damage_x, 32, RPG::Cache.picture("spDamage"),
  60.            Rect.new(number * 14, rect_y, 14, 50))
  61.           #调用HP伤害图片
  62.         else
  63. bitmap.blt(damage_x, 32, RPG::Cache.picture("Damage"),
  64.            Rect.new(number * 14, rect_y,14, 50))
  65.         end
  66.         # 后移一位
  67.         damage_x += 20
  68.       end
  69.     # 伤害值不是数值的情况
  70.     else
  71.       damage_string = value.to_s
  72.       # 如果伤害值不是 Miss
  73.       unless value == "Miss"
  74.         bitmap.font.color.set(0, 0, 0)
  75.         bitmap.draw_text(-1, 11, 160, 36, damage_string, 1)
  76.         #bitmap.draw_text(+1, 11, 160, 36, damage_string, 1)
  77.         #bitmap.draw_text(-1, 13, 160, 36, damage_string, 1)
  78.         #bitmap.draw_text(+1, 13, 160, 36, damage_string, 1)
  79.       # Miss 的情况下
  80.       else
  81.         # 显示未击中图画
  82.         bitmap.blt(36, 28, RPG::Cache.picture("Damage"),Rect.new(90, 64, 90, 50))
  83.       end
  84.     end
  85.     # 会心一击标志打开的情况
  86.     if critical
  87.       # 显示会心一击图画
  88.       bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
  89.     end
  90.     # 伤害值定位
  91.     @_damage_sprite = ::Sprite.new(self.viewport)
  92.     @_damage_sprite.bitmap = bitmap
  93.     @_damage_sprite.ox = 80
  94.     @_damage_sprite.oy = 20
  95.     @_damage_sprite.x = self.x
  96.     @_damage_sprite.y = self.y - self.oy / 2
  97.     @_damage_sprite.z = 3000
  98.     @_damage_duration = 40
  99.     #=======================================
  100.     # 修改:推入新的伤害
  101.     #=======================================
  102.      @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  103.      # 总伤害处理
  104.      make_total_damage(value)
  105.   end
  106.   #############################################################################
  107.   #--------------------------------------------------------------------------
  108.   # ● 总伤害处理
  109.   #--------------------------------------------------------------------------
  110.   ############################################################################
  111.   #总伤害图片化
  112.   def make_total_damage(value)
  113.     if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE  #如果总伤害数值为数字并且总伤害显示开关为真。
  114.       @_total_damage += value   
  115.       value1 = @_total_damage   #代入伤害数值
  116.     # damage_string = @_total_damage.abs.to_s
  117.         total_string = value1.abs.to_s   #转化字符串
  118.       #分割伤害数值
  119.       @_total_damage_array = total_string.scan(/./)
  120.       @_total_damage_x = (9 - total_string.size) * 9
  121.     else
  122.       return
  123.     end
  124.     ########图片尺寸以及字体
  125.     bitmap = Bitmap.new(320,82)
  126.     bitmap.font.name = "黑体"
  127.     bitmap.font.size = 32   
  128.     #################
  129.     if @_total_damage < 0   #如果总伤害小于0
  130.       rect_y = 32   #定位伤害值行数
  131.       ############处理伤害分割数字
  132.        for char in @_total_damage_array
  133.           number = char.to_i
  134.           if $SP判定 == 2  #当SP判定为2时,即显示SP恢复和伤害量
  135.             bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("sp总伤害"),
  136.             Rect.new(number * 25, rect_y, 25, 32))
  137.           else   #伤害为HP的情况下
  138.             bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("hp总伤害"),
  139.             Rect.new(number * 25, rect_y, 25, 32))
  140.           end
  141.           # 后移一位
  142.           @_total_damage_x += 25
  143.         end
  144.     else   #伤害值大于0的情况
  145.        rect_y = 0  #定位伤害值行数
  146.        #总伤害数值循环处理
  147.        for char in @_total_damage_array
  148.         number = char.to_i
  149.         if $SP判定 == 2   #当伤害为SP伤害时
  150.           bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("sp总伤害"),
  151.           Rect.new(number * 20, rect_y, 20, 32))
  152.         else  #除此以外的情况。
  153.           bitmap.blt(@_total_damage_x, 32, RPG::Cache.picture("hp总伤害"),
  154.           Rect.new(number * 20, rect_y, 0, 32))
  155.         end   
  156.         # 后移一位
  157.         @_total_damage_x += 25
  158.       end
  159.     end
  160.     if @_total_damage_sprite.nil?
  161.       @_total_damage_sprite = ::Sprite.new(self.viewport)
  162.       @_total_damage_sprite.ox = 80
  163.       @_total_damage_sprite.oy = 20
  164.       @_total_damage_sprite.z = 3000
  165.     end
  166.     @_total_damage_sprite.bitmap = bitmap
  167.     @_total_damage_sprite.zoom_x = 1.5
  168.     @_total_damage_sprite.zoom_y = 1.5
  169.     @_total_damage_sprite.x = self.x
  170.     @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  171.     @_total_damage_sprite.z = 3001
  172.     @_total_damage_duration = 80
  173.   end
  174.   ##################################################################
  175.   def animation(animation, hit, battler_damage="", battler_critical=false)
  176.      dispose_animation      
  177.      #=======================================
  178.      # 修改:记录伤害和critical
  179.      #=======================================
  180.      @battler_damage = battler_damage
  181.      @battler_critical = battler_critical
  182.      @_animation = animation
  183.      return if @_animation == nil
  184.      @_animation_hit = hit
  185.      @_animation_duration = @_animation.frame_max
  186.      animation_name = @_animation.animation_name
  187.      animation_hue = @_animation.animation_hue
  188.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  189.      #=======================================
  190.      # 修改:计算总闪光权限值
  191.      #=======================================
  192.      for timing in @_animation.timings
  193.        quanzhong = animation_process_timing(timing, @_animation_hit,true)
  194.        @all_quanzhong += quanzhong
  195.        # 记录最后一次闪光
  196.        @_last_frame = timing.frame if quanzhong != 0
  197.      end
  198.      #.........................................................................
  199.      @last_frame = @_last_frame
  200.      #.........................................................................
  201.      if @@_reference_count.include?(bitmap)
  202.        @@_reference_count[bitmap] += 1
  203.      else
  204.        @@_reference_count[bitmap] = 1
  205.      end
  206.      #=======================================
  207.      # 修改:行动方动画不显示伤害
  208.      #=======================================
  209.      if $scene.is_a?(Scene_Battle)
  210.        if $scene.animation1_id == @battler.animation_id
  211.          @battler_damage = ""
  212.        end
  213.      end
  214.      @_animation_sprites = []
  215.      if @_animation.position != 3 or not @@_animations.include?(animation)
  216.        for i in 0..15
  217.          sprite = ::Sprite.new(self.viewport)
  218.          sprite.bitmap = bitmap
  219.          sprite.visible = false
  220.          @_animation_sprites.push(sprite)
  221.        end
  222.        unless @@_animations.include?(animation)
  223.          @@_animations.push(animation)
  224.        end
  225.      end
  226.      update_animation
  227.    end
  228.    #=======================================
  229.    # 修改:更换清除伤害的算法,以防万一
  230.    #       本内容在脚本中没有使用过
  231.    #=======================================
  232.    def dispose_damage
  233.      for damage in @_damage.reverse
  234.        damage[0].bitmap.dispose
  235.        damage[0].dispose
  236.        @_damage.delete(damage)
  237.      end
  238.      @_total_damage = 0
  239.      @_last_frame = -1
  240.      if @_total_damage_sprite != nil
  241.        @_total_damage_duration = 0
  242.        @_total_damage_sprite.bitmap.dispose
  243.        @_total_damage_sprite.dispose
  244.        @_total_damage_sprite = nil
  245.      end
  246.    end
  247.    #=======================================
  248.    # 清除hit数
  249.    #=======================================
  250.    #...........................................................................
  251.    def dispose_hit
  252.      if @_hits_sprite != nil
  253.        @_hits_sprite.bitmap.dispose
  254.        @_hits_sprite.dispose
  255.        @_hits_sprite = nil
  256.      end
  257.    end
  258.    #...........................................................................
  259.    def dispose_animation
  260.      #=======================================
  261.      # 修改:清除记录的伤害,清除权重记录
  262.      #=======================================
  263.      @battler_damage = nil
  264.      @battler_critical = nil
  265.      @all_quanzhong = 1
  266.      @_total_damage = 0
  267.      @_last_frame = -1
  268.      #.........................................................................
  269.      @hits = 0
  270.      #.........................................................................
  271.      if @_animation_sprites != nil
  272.        sprite = @_animation_sprites[0]
  273.        if sprite != nil
  274.          @@_reference_count[sprite.bitmap] -= 1
  275.          if @@_reference_count[sprite.bitmap] == 0
  276.            sprite.bitmap.dispose
  277.          end
  278.        end
  279.        for sprite in @_animation_sprites
  280.          sprite.dispose
  281.        end
  282.        @_animation_sprites = nil
  283.        @_animation = nil
  284.      end
  285.    end
  286.    def update
  287.      super
  288.      if @_whiten_duration > 0
  289.        @_whiten_duration -= 1
  290.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  291.      end
  292.      if @_appear_duration > 0
  293.        @_appear_duration -= 1
  294.        self.opacity = (16 - @_appear_duration) * 16
  295.      end
  296.      if @_escape_duration > 0
  297.        @_escape_duration -= 1
  298.        self.opacity = 256 - (32 - @_escape_duration) * 10
  299.      end
  300.      if @_collapse_duration > 0
  301.        @_collapse_duration -= 1
  302.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  303.      end
  304.      #=======================================
  305.      # 修改:更新算法,更新弹出
  306.      #=======================================
  307.      if @_damage_duration > 0
  308.        @_damage_duration -= 1
  309.        for damage in @_damage
  310.          damage[0].x = self.x + self.viewport.rect.x -
  311.                        self.ox + self.src_rect.width / 2 +
  312.                        (40 - damage[1]) * damage[3] / 10
  313.          damage[0].y -= damage[4]+damage[1]/10
  314.          damage[0].opacity = damage[1]*20
  315.          damage[1] -= 1
  316.          if damage[1]==0
  317.            damage[0].bitmap.dispose
  318.            damage[0].dispose
  319.            @_damage.delete(damage)
  320.            next
  321.          end
  322.        end
  323.      end
  324.      #=======================================
  325.      # 添加:弹出总伤害
  326.      #=======================================
  327.      if @_total_damage_duration > 0
  328.        @_total_damage_duration -= 1
  329.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  330.        if @_total_damage_sprite.zoom_x > 1.0
  331.          @_total_damage_sprite.zoom_x -= 0.05
  332.        end
  333.        if @_total_damage_sprite.zoom_y > 1.0
  334.          @_total_damage_sprite.zoom_y -= 0.05
  335.        end
  336.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  337.        #......................................................................
  338.        if @_total_damage_duration <= 7 and @_total_damage_duration > 0
  339.         # @_hits_sprite.opacity -= 32
  340.          #@_hits_sprite.x += 1
  341.        end
  342.        #......................................................................
  343.        if @_total_damage_duration <= 0
  344.          #.....................................................................
  345.          dispose_hit
  346. ##########################
  347.          @_total_damage = 0
  348. ##########################
  349.          #.....................................................................
  350.          @_total_damage = 0
  351.          @_total_damage_duration = 0
  352. #####################################################小改动
  353.          if SHOW_TOTAL_DAMAGE
  354.          @_total_damage_sprite.bitmap.dispose
  355.          end
  356. #####################################################
  357.          @_total_damage_sprite.dispose
  358.          @_total_damage_sprite = nil
  359.        end
  360.      end
  361.      #=======================================
  362.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  363.        @_animation_duration -= 1
  364.        update_animation
  365.      end
  366.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  367.        update_loop_animation
  368.        @_loop_animation_index += 1
  369.        #......................................................................
  370.        @loop_animation_once = 0
  371.        @loop_animation_once = 1 if @once == 1 and @_loop_animation_index == @_loop_animation.frame_max
  372.        #......................................................................
  373.        @_loop_animation_index %= @_loop_animation.frame_max
  374.      end
  375.      if @_blink
  376.        @_blink_count = (@_blink_count + 1) % 32
  377.        if @_blink_count < 16
  378.          alpha = (16 - @_blink_count) * 6
  379.        else
  380.          alpha = (@_blink_count - 16) * 6
  381.        end
  382.        self.color.set(255, 255, 255, alpha)
  383.      end
  384.      @@_animations.clear
  385.    end
  386.    #..........................................................................
  387.    def loop_animation_once
  388.      return @_loop_animation_once
  389.    end
  390.    #..........................................................................
  391.    def update_animation
  392.      if @_animation_duration > 0
  393.        frame_index = @_animation.frame_max - @_animation_duration
  394.        @frame_index = frame_index
  395.        cell_data = @_animation.frames[frame_index].cell_data
  396.        position = @_animation.position
  397.        animation_set_sprites(@_animation_sprites, cell_data, position)
  398.        #=======================================
  399.        # 修改:弹出伤害,权重计算
  400.        #=======================================
  401.        for timing in @_animation.timings
  402.          if timing.frame == frame_index
  403.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  404.            #p t,"当前权重", @all_quanzhong,"总权重"
  405.            if @battler_damage.is_a?(Numeric) and t != 0
  406.              t *= @battler_damage
  407.              t /= @all_quanzhong
  408.              t = t.to_i
  409.              #在闪光不是最后一次的情况下,把这次伤害加入到已经发生的伤害中★★★★★★★★★★★★★★★★★★★★★★★★★★
  410.              if frame_index != @_last_frame
  411.              @p_dam+= t
  412.              end
  413.              #p @p_dam,"已发生伤害",@battler_damage,"总伤害"(调试用)★★★★★★★★★★★★★★★★★★★★★★★★★★
  414.              #闪光为最后一次的情况下,改变这次伤害的计算方法(总伤害-已经发生伤害)★★★★★★★★★★★★★★★★★★★★★★★★★★
  415.              if frame_index == @_last_frame
  416.                t=@battler_damage-@p_dam
  417.              end
  418.              #p t,"当前伤害",@battler_damage,"总伤害"
  419.              # 最后一次闪光的话,伤害修正
  420.              if frame_index == @_last_frame
  421.                @_total_damage = @battler_damage - t
  422.                @p_dam=0      #已经发生的伤害归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  423.             end
  424.              #p t,@battler_damage,@all_quanzhong
  425.              damage(t,@battler_critical)
  426.             #连击次数归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  427.             if frame_index == @_last_frame
  428.                       ############ #小改动
  429.                       @last_hits=1
  430.                       @temp_hits=0
  431.                       ############
  432.                       @hits=0
  433.             end
  434.            # 防止重复播放miss
  435.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  436.              damage(@battler_damage,@battler_critical)
  437.            end
  438.          end
  439.        end
  440.      else
  441.        dispose_animation
  442.      end
  443.    end
  444.    #=======================================
  445.    # 修改:敌人跳跃的功能 + 添加返回数值
  446.    #=======================================
  447.    def update_loop_animation
  448.      frame_index = @_loop_animation_index
  449.      cell_data = @_loop_animation.frames[frame_index].cell_data
  450.      position = @_loop_animation.position
  451.      #·改·
  452.      if @wait_count.to_i <= 0
  453.        @wait_count = 0
  454.        animation_set_sprites(@_loop_animation_sprites, cell_data, position)
  455.      else
  456.        @wait_count -= 1
  457.        for sprite in @_loop_animation_sprites
  458.          sprite.visible = false
  459.        end
  460.      end
  461.      if @wait_flash.to_i <= 0
  462.        @wait_flash = 0
  463.      else
  464.        @wait_flash -= 1
  465.        for sprite in @_loop_animation_sprites
  466.          sprite.blend_type = 1
  467.        end
  468.      end
  469.      #·改·
  470.      for timing in @_loop_animation.timings
  471.        if timing.frame == frame_index
  472.          animation_process_timing(timing, true)
  473.        end
  474.      end
  475.    end
  476.    #=======================================
  477.    # 修改:敌人跳跃的功能 + 添加返回数值
  478.    #=======================================
  479.    def loop_animation(animation)
  480.      return if animation == @_loop_animation
  481.      dispose_loop_animation
  482.      @_loop_animation = animation
  483.      return if @_loop_animation == nil
  484.      @_loop_animation_index = 0
  485.      animation_name = @_loop_animation.animation_name
  486.      animation_hue = @_loop_animation.animation_hue
  487.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  488.      if @@_reference_count.include?(bitmap)
  489.        @@_reference_count[bitmap] += 1
  490.      else
  491.        @@_reference_count[bitmap] = 1
  492.      end
  493.      @_loop_animation_sprites = []
  494.      for i in 0..15
  495.        sprite = ::Sprite.new
  496.        sprite.bitmap = bitmap
  497.        sprite.visible = false
  498.        @_loop_animation_sprites.push(sprite)
  499.      end
  500.      update_loop_animation
  501.    end
  502.    #=======================================
  503.    # 修改:敌人跳跃的功能 + 添加返回数值
  504.    #=======================================
  505.     def animation_process_timing(timing, hit,dontflash=false)
  506.       if (timing.condition == 0) or
  507.          (timing.condition == 1 and hit == true) or
  508.          (timing.condition == 2 and hit == false)
  509.         unless dontflash
  510.           if timing.se.name != ""
  511.             se = timing.se
  512.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  513.           end
  514.         end
  515.         case timing.flash_scope
  516.         when 1
  517.           unless dontflash
  518.             self.flash(timing.flash_color, timing.flash_duration * 2)
  519.             #....................................................................
  520.             @wait_flash = timing.flash_duration
  521.             #....................................................................
  522.             if @_total_damage >0
  523.               @flash_shake_switch = true
  524.               @flash_shake = 10
  525.             end
  526.           end
  527.           return timing.flash_color.alpha * timing.flash_duration
  528.         when 2
  529.           unless dontflash
  530.             if self.viewport != nil
  531.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  532.               return timing.flash_color.alpha * timing.flash_duration
  533.             end
  534.           end
  535.         when 3
  536.           unless dontflash
  537.             self.flash(nil, timing.flash_duration * 2)
  538.             #@_loop_animation_count = 1
  539.             #·改·
  540.             @wait_count = timing.flash_duration
  541.             #·改·
  542.           end
  543.           return timing.flash_color.alpha * timing.flash_duration
  544.         end
  545.       end      
  546.       return 0
  547.     end   
  548. end
  549. end

  550. #==============================================================================
  551. # ■ Scene_Battle
  552. #------------------------------------------------------------------------------
  553. #  处理战斗画面的类。
  554. #==============================================================================

  555. class Scene_Battle
  556.   #--------------------------------------------------------------------------
  557.   # ● 定义实例变量
  558.   #--------------------------------------------------------------------------
  559.   attr_reader   :animation1_id                    # 行动方动画ID
  560.   def statusupdate
  561.      @status_window.refresh
  562.      Graphics.frame_reset
  563.   end
  564. end
复制代码




好了 这个问题 你去问帮你改脚本的人= =| 是他出了错
也就是说 数据库 动画 (也就是说 默认阿尔 剑 如果没有闪烁对象的话 就不会显示伤害)
是在闪光 弹出伤害出了问题
和图片没有关系 =。=  图片显示多少 就确实是打出了多少伤害

所以说 这个改过的是不完整版= =|

现在伤害显示正常
距离的话 起码你截个图来看 距离多远 我不能凭空猜吧=。=

把以上脚本 替换原来的 再试试
你PS 做个效果图 我看着还明白点= =|



http://rpg.blue/upload_program/d/redant_Project5_108751940.rar
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1040
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

9
发表于 2008-12-4 08:47:29 | 只看该作者
其实楼上,原版198 行删掉
quanzhong = 0
就可以解决天文数字问题
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
10
发表于 2008-12-4 14:52:45 | 只看该作者
多谢禾老大 指导  我去看看先{/wx}
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-21 00:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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