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

Project1

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

怎样让攻击时掉血仿网游向上升?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2006-9-7
帖子
303
跳转到指定楼层
1
发表于 2008-11-13 18:15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x

怎样让攻击时掉血仿网游向上升?

  就是当角色或敌人被攻击时,掉血向上升,仿网游的那种.

   效果就像下图所示的那样:

   

  谢谢!
版务信息:本贴由楼主自主结贴~
十年磨一剑,蓦然回首,年华如水,青春如歌。

Lv1.梦旅人

穿越一季:朔

梦石
0
星屑
50
在线时间
333 小时
注册时间
2007-4-11
帖子
5369

贵宾

2
发表于 2008-11-13 18:33:24 | 只看该作者
。。。。。看半天才知道你说的是伤害数字飘动效果

主站搜索美化伤害

里面一般有浮动坐标..那里改动即可
6R复活?别扯淡了.

柳柳一旦接手66RPG,我果断呵呵啊。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
3
发表于 2008-11-13 18:35:24 | 只看该作者
彩虹剑脚本

把分次掉血的删掉 只留最后算出的掉血结果
坐标自己调
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

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

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2006-9-7
帖子
303
4
 楼主| 发表于 2008-11-13 19:32:08 | 只看该作者
  1. # ============================================================================
  2. # 伤害效果美化
  3. # ============================================================================

  4. # 脚本使用说明:

  5. # 1.使用时需要将Damage.png复制到你的游戏的Graphics/Pictures目录下

  6. # 2.Damage.png文件的格式:

  7. #   大小为180 x 96

  8. #   (0, 0) - (179, 31)为伤害值的数字表,其中每个数字宽18,高32

  9. #   (0, 32) - (179, 63)为回复值(伤害负值)的数字表,其中每个数字宽18,高32

  10. #   (0, 64) - (89, 95)为会心一击标记的图画,长宽为90 x 32

  11. #   (90, 64) - (179, 95)为未命中标记的图画,长宽为90 x 32

  12. # ============================================================================

  13. module RPG

  14.   class Sprite < ::Sprite
  15.     #--------------------------------------------------------------------------
  16.     # ● 伤害值描画
  17.     #--------------------------------------------------------------------------
  18.     def damage(value, critical, sp_damage = false)

  19.      # 释放伤害
  20.       dispose_damage
  21.       # 如果伤害值是数值
  22.       if value.is_a?(Numeric)
  23.         # 绝对值转为字符串
  24.         damage_string = value.abs.to_s
  25.       else
  26.         # 转为字符串
  27.         damage_string = value.to_s
  28.       end
  29.       # 初始化位图
  30.       bitmap = Bitmap.new(162, 64)
  31.       bitmap.font.name = "Arial Black"
  32.       bitmap.font.size = 32
  33.       # 伤害值是数值的情况下
  34.       if value.is_a?(Numeric)
  35.         # 分割伤害值字符串
  36.         damage_array = damage_string.scan(/./)
  37.         damage_x = 81 - damage_string.size * 9
  38.         # 伤害值为负的情况下
  39.         if value < 0
  40.           # 调用回复数字表
  41.           rect_y = 32
  42.         else
  43.           # 调用伤害数字表
  44.           rect_y = 0
  45.         end
  46.         # 循环伤害值字符串

  47.        for char in damage_array
  48.          number = char.to_i
  49.           # 显示伤害数字
  50.        if sp_damage
  51.          bitmap.blt(damage_x, 32, RPG::Cache.picture("Damagesp"),
  52.          Rect.new(number * 18, rect_y, 18, 32))
  53.          damage_x += 18
  54.        else
  55.          bitmap.blt(damage_x, 32, RPG::Cache.picture("002"),
  56.          Rect.new(number * 18, rect_y, 18, 32))
  57.          damage_x += 18
  58.        end
  59.       end
  60.       # 伤害值不是数值的情况
  61.       else
  62.         # Miss 的情况下
  63.         if value == "Miss"
  64.           # 显示未击中图画
  65.           bitmap.blt(36, 28, RPG::Cache.picture("002"), Rect.new(90, 64, 90, 32))
  66.         end
  67.         # 免疫的情况下
  68.         if value == "Nothing"
  69.           # 显示未击中图画
  70.           bitmap.blt(36, 28, RPG::Cache.picture("002"), Rect.new(0, 96, 90, 32))
  71.         end
  72.         # 反射的情况下
  73.         if value == "Mirro return"
  74.           # 显示未击中图画
  75.           bitmap.blt(36, 28, RPG::Cache.picture("002"), Rect.new(90, 96, 90, 32))
  76.         end
  77.       end
  78.       # 会心一击标志打开的情况
  79.       if critical
  80.         # 显示会心一击图画
  81.         bitmap.blt(36, 0, RPG::Cache.picture("002"), Rect.new(0, 64, 90, 32))
  82.       end
  83.       # 伤害值定位
  84.       @_damage_sprite = ::Sprite.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 / 2
  90.       @_damage_sprite.z = 3000
  91.       @_damage_duration = 40
  92.     end
  93.   end
  94. end
复制代码


这个脚本怎么修改成伤害数字飘动效果?  可以把图片去除吗? 直接显示伤害数字就行了.
十年磨一剑,蓦然回首,年华如水,青春如歌。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2006-9-7
帖子
303
5
 楼主| 发表于 2008-11-14 01:25:17 | 只看该作者
还有其它的脚本可以实现吗?  我不会修改脚本啊, 正在学习.
十年磨一剑,蓦然回首,年华如水,青春如歌。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
6
发表于 2008-11-14 01:51:08 | 只看该作者
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. =begin
  5. ==============================================================================

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

  7. ==============================================================================
  8. # 核心的说明:
  9. # damage_pop 不再附带damage()的功能,这个放到animation里面去了
  10. =end

  11. module RPG
  12. #--------------------------------------------------------------------------
  13. # ● 常量设定
  14. #--------------------------------------------------------------------------
  15. # 是否显示总伤害
  16. SHOW_TOTAL_DAMAGE = true
  17. # 角色受攻击时是否跳一下
  18. BATTLER_JUMP = false
  19. # 连续伤害的动画ID
  20. SLIP_DAMAGE_ANIMATION_ID = 105

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

  617. #==============================================================================
  618. # ■ Scene_Battle
  619. #------------------------------------------------------------------------------
  620. #  处理战斗画面的类。
  621. #==============================================================================

  622. class Scene_Battle
  623. #--------------------------------------------------------------------------
  624. # ● 定义实例变量
  625. #--------------------------------------------------------------------------
  626. attr_reader   :animation1_id                    # 行动方动画ID
  627. end

  628. #==============================================================================
  629. # ■ Game_Battler
  630. #------------------------------------------------------------------------------
  631. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  632. # 超级类来使用。
  633. #==============================================================================

  634. class Game_Battler
  635.   #--------------------------------------------------------------------------
  636.   # ● 应用连续伤害效果
  637.   #--------------------------------------------------------------------------
  638.   alias rainbow_sword_slip_damage_effect slip_damage_effect
  639.   def slip_damage_effect
  640.     self.animation_id = RPG::SLIP_DAMAGE_ANIMATION_ID
  641.     self.animation_hit = true
  642.     rainbow_sword_slip_damage_effect
  643.   end
  644. end
复制代码


向上漂……漂……

虽然大了点=。=



《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

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

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

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
7
发表于 2008-11-14 02:12:10 | 只看该作者
  1. module RPG
  2.   class Sprite < ::Sprite
  3.     @@_animations = []
  4.     @@_reference_count = {}
  5.     def initialize(viewport = nil)
  6.       super(viewport)
  7.       @_whiten_duration = 0
  8.       @_appear_duration = 0
  9.       @_escape_duration = 0
  10.       @_collapse_duration = 0
  11.       @_damage_duration = 0
  12.       @_animation_duration = 0
  13.       @_blink = false
  14.     end
  15.     def dispose
  16.       dispose_damage
  17.       dispose_animation
  18.       dispose_loop_animation
  19.       super
  20.     end
  21.     def whiten
  22.       self.blend_type = 0
  23.       self.color.set(255, 255, 255, 128)
  24.       self.opacity = 255
  25.       @_whiten_duration = 16
  26.       @_appear_duration = 0
  27.       @_escape_duration = 0
  28.       @_collapse_duration = 0
  29.     end
  30.     def appear
  31.       self.blend_type = 0
  32.       self.color.set(0, 0, 0, 0)
  33.       self.opacity = 0
  34.       @_appear_duration = 16
  35.       @_whiten_duration = 0
  36.       @_escape_duration = 0
  37.       @_collapse_duration = 0
  38.     end
  39.     def escape
  40.       self.blend_type = 0
  41.       self.color.set(0, 0, 0, 0)
  42.       self.opacity = 255
  43.       @_escape_duration = 32
  44.       @_whiten_duration = 0
  45.       @_appear_duration = 0
  46.       @_collapse_duration = 0
  47.     end
  48.     def collapse
  49.       self.blend_type = 1
  50.       self.color.set(255, 64, 64, 255)
  51.       self.opacity = 255
  52.       @_collapse_duration = 48
  53.       @_whiten_duration = 0
  54.       @_appear_duration = 0
  55.       @_escape_duration = 0
  56.     end
  57.     def damage(value, critical)
  58.       dispose_damage
  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.       if value.is_a?(Numeric) and value < 0
  73.         bitmap.font.color.set(176, 255, 144)
  74.       else
  75.         bitmap.font.color.set(255, 255, 255)
  76.       end
  77.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  78.       if critical
  79.         bitmap.font.size = 20
  80.         bitmap.font.color.set(0, 0, 0)
  81.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  82.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  83.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  84.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  85.         bitmap.font.color.set(255, 255, 255)
  86.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  87.       end
  88.       @_damage_sprite = ::Sprite.new(self.viewport)
  89.       @_damage_sprite.bitmap = bitmap
  90.       @_damage_sprite.ox = 80
  91.       @_damage_sprite.oy = 20
  92.       @_damage_sprite.x = self.x
  93.       @_damage_sprite.y = self.y - self.oy / 2
  94.       @_damage_sprite.z = 3000
  95.       @_damage_duration = 40
  96.     end
  97.     def animation(animation, hit)
  98.       dispose_animation
  99.       @_animation = animation
  100.       return if @_animation == nil
  101.       @_animation_hit = hit
  102.       @_animation_duration = @_animation.frame_max
  103.       animation_name = @_animation.animation_name
  104.       animation_hue = @_animation.animation_hue
  105.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  106.       if @@_reference_count.include?(bitmap)
  107.         @@_reference_count[bitmap] += 1
  108.       else
  109.         @@_reference_count[bitmap] = 1
  110.       end
  111.       @_animation_sprites = []
  112.       if @_animation.position != 3 or not @@_animations.include?(animation)
  113.         for i in 0..15
  114.           sprite = ::Sprite.new(self.viewport)
  115.           sprite.bitmap = bitmap
  116.           sprite.visible = false
  117.           @_animation_sprites.push(sprite)
  118.         end
  119.         unless @@_animations.include?(animation)
  120.           @@_animations.push(animation)
  121.         end
  122.       end
  123.       update_animation
  124.     end
  125.     def loop_animation(animation)
  126.       return if animation == @_loop_animation
  127.       dispose_loop_animation
  128.       @_loop_animation = animation
  129.       return if @_loop_animation == nil
  130.       @_loop_animation_index = 0
  131.       animation_name = @_loop_animation.animation_name
  132.       animation_hue = @_loop_animation.animation_hue
  133.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  134.       if @@_reference_count.include?(bitmap)
  135.         @@_reference_count[bitmap] += 1
  136.       else
  137.         @@_reference_count[bitmap] = 1
  138.       end
  139.       @_loop_animation_sprites = []
  140.       for i in 0..15
  141.         sprite = ::Sprite.new(self.viewport)
  142.         sprite.bitmap = bitmap
  143.         sprite.visible = false
  144.         @_loop_animation_sprites.push(sprite)
  145.       end
  146.       update_loop_animation
  147.     end
  148.     def dispose_damage
  149.       if @_damage_sprite != nil
  150.         @_damage_sprite.bitmap.dispose
  151.         @_damage_sprite.dispose
  152.         @_damage_sprite = nil
  153.         @_damage_duration = 0
  154.       end
  155.     end
  156.     def dispose_animation
  157.       if @_animation_sprites != nil
  158.         sprite = @_animation_sprites[0]
  159.         if sprite != nil
  160.           @@_reference_count[sprite.bitmap] -= 1
  161.           if @@_reference_count[sprite.bitmap] == 0
  162.             sprite.bitmap.dispose
  163.           end
  164.         end
  165.         for sprite in @_animation_sprites
  166.           sprite.dispose
  167.         end
  168.         @_animation_sprites = nil
  169.         @_animation = nil
  170.       end
  171.     end
  172.     def dispose_loop_animation
  173.       if @_loop_animation_sprites != nil
  174.         sprite = @_loop_animation_sprites[0]
  175.         if sprite != nil
  176.           @@_reference_count[sprite.bitmap] -= 1
  177.           if @@_reference_count[sprite.bitmap] == 0
  178.             sprite.bitmap.dispose
  179.           end
  180.         end
  181.         for sprite in @_loop_animation_sprites
  182.           sprite.dispose
  183.         end
  184.         @_loop_animation_sprites = nil
  185.         @_loop_animation = nil
  186.       end
  187.     end
  188.     def blink_on
  189.       unless @_blink
  190.         @_blink = true
  191.         @_blink_count = 0
  192.       end
  193.     end
  194.     def blink_off
  195.       if @_blink
  196.         @_blink = false
  197.         self.color.set(0, 0, 0, 0)
  198.       end
  199.     end
  200.     def blink?
  201.       @_blink
  202.     end
  203.     def effect?
  204.       @_whiten_duration > 0 or
  205.       @_appear_duration > 0 or
  206.       @_escape_duration > 0 or
  207.       @_collapse_duration > 0 or
  208.       @_damage_duration > 0 or
  209.       @_animation_duration > 0
  210.     end
  211.     def update
  212.       super
  213.       if @_whiten_duration > 0
  214.         @_whiten_duration -= 1
  215.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  216.       end
  217.       if @_appear_duration > 0
  218.         @_appear_duration -= 1
  219.         self.opacity = (16 - @_appear_duration) * 16
  220.       end
  221.       if @_escape_duration > 0
  222.         @_escape_duration -= 1
  223.         self.opacity = 256 - (32 - @_escape_duration) * 10
  224.       end
  225.       if @_collapse_duration > 0
  226.         @_collapse_duration -= 1
  227.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  228.       end
  229.       if @_damage_duration > 0
  230.         @_damage_duration -= 1
  231.         case @_damage_duration
  232.         when 38..39
  233.           @_damage_sprite.y -= 4
  234.         when 36..37
  235.           @_damage_sprite.y -= 4
  236.         when 34..35
  237.           @_damage_sprite.y -= 4
  238.         when 28..33
  239.           @_damage_sprite.y -= 4
  240.         end
  241.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  242.         if @_damage_duration == 0
  243.           dispose_damage
  244.         end
  245.       end
  246.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  247.         @_animation_duration -= 1
  248.         update_animation
  249.       end
  250.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  251.         update_loop_animation
  252.         @_loop_animation_index += 1
  253.         @_loop_animation_index %= @_loop_animation.frame_max
  254.       end
  255.       if @_blink
  256.         @_blink_count = (@_blink_count + 1) % 32
  257.         if @_blink_count < 16
  258.           alpha = (16 - @_blink_count) * 6
  259.         else
  260.           alpha = (@_blink_count - 16) * 6
  261.         end
  262.         self.color.set(255, 255, 255, alpha)
  263.       end
  264.       @@_animations.clear
  265.     end
  266.     def update_animation
  267.       if @_animation_duration > 0
  268.         frame_index = @_animation.frame_max - @_animation_duration
  269.         cell_data = @_animation.frames[frame_index].cell_data
  270.         position = @_animation.position
  271.         animation_set_sprites(@_animation_sprites, cell_data, position)
  272.         for timing in @_animation.timings
  273.           if timing.frame == frame_index
  274.             animation_process_timing(timing, @_animation_hit)
  275.           end
  276.         end
  277.       else
  278.         dispose_animation
  279.       end
  280.     end
  281.     def update_loop_animation
  282.       frame_index = @_loop_animation_index
  283.       cell_data = @_loop_animation.frames[frame_index].cell_data
  284.       position = @_loop_animation.position
  285.       animation_set_sprites(@_loop_animation_sprites, cell_data, position)
  286.       for timing in @_loop_animation.timings
  287.         if timing.frame == frame_index
  288.           animation_process_timing(timing, true)
  289.         end
  290.       end
  291.     end
  292.     def animation_set_sprites(sprites, cell_data, position)
  293.       for i in 0..15
  294.         sprite = sprites[i]
  295.         pattern = cell_data[i, 0]
  296.         if sprite == nil or pattern == nil or pattern == -1
  297.           sprite.visible = false if sprite != nil
  298.           next
  299.         end
  300.         sprite.visible = true
  301.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  302.         if position == 3
  303.           if self.viewport != nil
  304.             sprite.x = self.viewport.rect.width / 2
  305.             sprite.y = self.viewport.rect.height - 160
  306.           else
  307.             sprite.x = 320
  308.             sprite.y = 240
  309.           end
  310.         else
  311.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  312.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  313.           sprite.y -= self.src_rect.height / 4 if position == 0
  314.           sprite.y += self.src_rect.height / 4 if position == 2
  315.         end
  316.         sprite.x += cell_data[i, 1]
  317.         sprite.y += cell_data[i, 2]
  318.         sprite.z = 2000
  319.         sprite.ox = 96
  320.         sprite.oy = 96
  321.         sprite.zoom_x = cell_data[i, 3] / 100.0
  322.         sprite.zoom_y = cell_data[i, 3] / 100.0
  323.         sprite.angle = cell_data[i, 4]
  324.         sprite.mirror = (cell_data[i, 5] == 1)
  325.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  326.         sprite.blend_type = cell_data[i, 7]
  327.       end
  328.     end
  329.     def animation_process_timing(timing, hit)
  330.       if (timing.condition == 0) or
  331.          (timing.condition == 1 and hit == true) or
  332.          (timing.condition == 2 and hit == false)
  333.         if timing.se.name != ""
  334.           se = timing.se
  335.           Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  336.         end
  337.         case timing.flash_scope
  338.         when 1
  339.           self.flash(timing.flash_color, timing.flash_duration * 2)
  340.         when 2
  341.           if self.viewport != nil
  342.             self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  343.           end
  344.         when 3
  345.           self.flash(nil, timing.flash_duration * 2)
  346.         end
  347.       end
  348.     end
  349.     def x=(x)
  350.       sx = x - self.x
  351.       if sx != 0
  352.         if @_animation_sprites != nil
  353.           for i in 0..15
  354.             @_animation_sprites[i].x += sx
  355.           end
  356.         end
  357.         if @_loop_animation_sprites != nil
  358.           for i in 0..15
  359.             @_loop_animation_sprites[i].x += sx
  360.           end
  361.         end
  362.       end
  363.       super
  364.     end
  365.     def y=(y)
  366.       sy = y - self.y
  367.       if sy != 0
  368.         if @_animation_sprites != nil
  369.           for i in 0..15
  370.             @_animation_sprites[i].y += sy
  371.           end
  372.         end
  373.         if @_loop_animation_sprites != nil
  374.           for i in 0..15
  375.             @_loop_animation_sprites[i].y += sy
  376.           end
  377.         end
  378.       end
  379.       super
  380.     end
  381.   end
  382. end
复制代码


这个放在main上
F11里找不到 所以去F1里找的

想修改的话搜 RPG::Sprite
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

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

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-21 17:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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