Project1

标题: 地图上显示血条问题. [打印本页]

作者: 吸血鬼王族    时间: 2007-7-1 10:32
标题: 地图上显示血条问题.
在main前加入以下脚本
  1. class Game_Actor < Game_Battler
  2. def now_exp
  3.    return @exp - @exp_list[@level]
  4. end
  5. def next_exp
  6.    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  7. end
  8. end
  9. #==============================================================================
  10. # ■ ARPG_Actor
  11. #------------------------------------------------------------------------------
  12. #  处理ARPG角色的类。
  13. #==============================================================================
  14. class ARPG_Actor
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对象
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     @actor = $game_party.actors[0]
  20.     @hp = $game_party.actors[0].hp
  21.     @sp = $game_party.actors[0].sp
  22.     @exp = $game_party.actors[0].now_exp
  23.     @states = $game_party.actors[0].states
  24.     @parameter = []
  25.     #Mess_Text.visible = true
  26.     #Mess_Text.ini
  27.   end

  28.   #--------------------------------------------------------------------------
  29.   # ● 生成精灵的实例
  30.   #--------------------------------------------------------------------------
  31.   def make_sprite
  32.    
  33.     @parameter[0] = Sprite.new
  34.     @parameter[0].bitmap = Bitmap.new(150,120)
  35.     @parameter[0].bitmap.blt(0,0,RPG::Cache.picture("l1"),Rect.new(0,0,150,120))
  36.     @parameter[0].x = 30;@parameter[0].y = 355
  37.    
  38.     @parameter[1] = Sprite.new
  39.     @parameter[1].bitmap = Bitmap.new(400,300)
  40.     @parameter[1].bitmap.blt(0,0,RPG::Cache.picture("01"),Rect.new(0,0,400,300))
  41.     @parameter[1].x = 0;@parameter[1].y = 180
  42.    
  43.     @parameter[2] = Sprite.new
  44.     @parameter[2].bitmap = Bitmap.new(400,300)
  45.     @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("04"),Rect.new(0,0,233,300))
  46.     h = $game_party.actors[0].hp * 233 / $game_party.actors[0].maxhp
  47.     @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("042"),Rect.new(0,0,h,300))
  48.     @parameter[2].x = 143;@parameter[2].y = 180
  49.    
  50.     @parameter[3] = Sprite.new
  51.     @parameter[3].bitmap = Bitmap.new(400,300)
  52.     @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("03"),Rect.new(0,0,237 ,300))
  53.     h = $game_party.actors[0].sp * 237 / $game_party.actors[0].maxsp
  54.     @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("032"),Rect.new(0,0,h,300))
  55.     @parameter[3].x = 143;@parameter[3].y = 180
  56.    
  57.     @parameter[4] = Sprite.new
  58.     @parameter[4].bitmap = Bitmap.new(400,300)
  59.     @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("02"),Rect.new(0,0,256,300))
  60.     h = $game_party.actors[0].now_exp * 256 / $game_party.actors[0].next_exp
  61.     @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("022"),Rect.new(0,0,h,300))
  62.     @parameter[4].x = 125;@parameter[4].y = 180
  63.    
  64.     @parameter[5] = Sprite.new
  65.     @parameter[5].bitmap = Bitmap.new(400,300)
  66.     @parameter[5].bitmap.blt(0,0,RPG::Cache.picture("001"),Rect.new(0,0,400,300))
  67.     @parameter[5].x = 0;@parameter[5].y = 180
  68.    
  69.    
  70.     @parameter.each{|e|e.z += 1}
  71.    
  72.     @parameter[6] = Sprite.new
  73.     @parameter[6].bitmap = Bitmap.new(128,32)
  74.     @parameter[6].x = 128
  75.     @parameter[6].y = 480 - 32
  76.    
  77.     draw_actor_state(@actor,0,0)
  78.    
  79.     @parameter.each{|e|e.z += 2}
  80.    

  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 描绘状态
  84.   #     actor : 角色
  85.   #     x     : 描画目标 X 坐标
  86.   #     y     : 描画目标 Y 坐标
  87.   #     width : 描画目标的宽
  88.   #--------------------------------------------------------------------------
  89.   def draw_actor_state(actor, x, y, width = 120)
  90.     pos = 0
  91.     for i in @actor.states
  92.       if $data_states[i].name == "战斗不能"
  93.         next
  94.       end
  95.       bitmap = RPG::Cache.icon($data_states[i].name)
  96.       @parameter[6].bitmap.blt(x+pos*bitmap.width, y, bitmap, Rect.new(0,0,bitmap.width,bitmap.height))
  97.     pos += 1
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 更新数值变化
  102.   #--------------------------------------------------------------------------
  103.   def refresh(type)
  104.     case type
  105.     when 0
  106.       @parameter[2].bitmap.clear
  107.       @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("04"),Rect.new(0,0,233,300))
  108.       h = @hp  * 233 / $game_party.actors[0].maxhp
  109.       @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("042"),Rect.new(0,0,h,300))
  110.       return
  111.     when 1
  112.       @parameter[3].bitmap.clear
  113.       @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("03"),Rect.new(0,0,237,300))
  114.       h = @sp  * 237 / $game_party.actors[0].maxsp
  115.       @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("032"),Rect.new(0,0,h,300))
  116.       return
  117.     when 2
  118.       @parameter[4].bitmap.clear
  119.       @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("02"),Rect.new(0,0,256,300))
  120.       h = @exp  * 256 / $game_party.actors[0].next_exp
  121.       @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("022"),Rect.new(0,0,h,300))
  122.       return

  123.      when 3
  124.        @parameter[6].bitmap.clear
  125.        draw_actor_state(@actor,0,0)
  126.        @states = $game_party.actors[0].states
  127.       return
  128.     end


  129.   end
  130.   
  131.   #--------------------------------------------------------------------------
  132.   # ● 刷新
  133.   #--------------------------------------------------------------------------
  134.   def update
  135.     Mess_Text.update
  136.     if $refresh["states"]
  137.       refresh(3)
  138.       $refresh["states"] = false
  139.     end
  140.     if $refresh["item"]
  141.       @item_window.refresh(@actor)
  142.       $refresh["item"] = false
  143.     end
  144.     if $refresh["skill"]
  145.       @key_window.refresh(@actor)
  146.       $refresh["skill"] = false
  147.     end
  148.     if @actor.states.size > 0
  149.       for i in @actor.states
  150.         if @actor.states_time[i] > 0
  151.           @actor.states_time[i] -= 1
  152.         end
  153.         if @actor.states_time[i] <= 0
  154.           @actor.remove_state(i)
  155.         end
  156.       end
  157.       if @actor.states.size > 0 and Graphics.frame_count%10 == 0
  158.         $game_party.check_map_slip_damage
  159.       end
  160.     end
  161.     if Input.trigger?(Input::CTRL)
  162.       Mess_Text.clear
  163.       return
  164.     end
  165.     if Input.trigger?(Input::SHIFT)
  166.       Mess_Text.visible = !Mess_Text.visible
  167.       return
  168.     end
  169.     if @hp != $game_party.actors[0].hp
  170.       if @hp > $game_party.actors[0].hp
  171.         @hp -= 1
  172.       end
  173.       if @hp < $game_party.actors[0].hp
  174.         @hp += 1
  175.       end
  176.       refresh(0)
  177.     end
  178.     if @sp != $game_party.actors[0].sp
  179.       if @sp > $game_party.actors[0].sp
  180.         @sp -= 1
  181.       end
  182.       if @sp < $game_party.actors[0].sp
  183.         @sp += 1
  184.       end
  185.       refresh(1)
  186.     end
  187.     if @exp != $game_party.actors[0].now_exp
  188.       if @exp > $game_party.actors[0].now_exp
  189.         @exp -= 1
  190.       end
  191.       if @exp < $game_party.actors[0].now_exp
  192.         @exp += 1
  193.       end
  194.       refresh(2)
  195.     end
  196.   end
  197.   

  198. end
复制代码



  1. module RPG
  2.   class Sprite < ::Sprite   
  3.     def initialize(viewport = nil)
  4.       super(viewport)
  5.       @_whiten_duration = 0
  6.       @_appear_duration = 0
  7.       @_escape_duration = 0
  8.       @_collapse_duration = 0
  9.       @_damage_duration = 0
  10.       @_animation_duration = 0
  11.       @_blink = false
  12.       @_damage = []
  13.     end
  14.     def dispose_damage
  15.       for damage in @_damage
  16.         damage[0].bitmap.dispose
  17.         damage[0].dispose
  18.         @_damage.delete(damage)
  19.       end
  20.     end
  21.     def damage(value, critical)
  22.       dispose_damage
  23.       if value.is_a?(Numeric)
  24.         damage_string = value.abs.to_s
  25.       else
  26.         damage_string = value.to_s
  27.       end
  28.       bitmap = Bitmap.new(160, 48)
  29.       bitmap.font.name = "Arial Black"
  30.       bitmap.font.size = 20
  31.       bitmap.font.color.set(0, 0, 0)
  32.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  33.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  34.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  35.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  36.       if value.is_a?(Numeric) and value < 0
  37.         bitmap.font.color.set(176, 255, 144)
  38.       else
  39.         bitmap.font.color.set(255, 0, 0)
  40.       end
  41.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  42.       if critical
  43.         bitmap.font.size = 20
  44.         bitmap.font.color.set(0, 0, 0)
  45.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  46.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  47.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  48.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  49.         bitmap.font.color.set(255, 255, 255)
  50.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  51.       end
  52.       num = @_damage.size
  53.       @_damage.push([::Sprite.new, 40, 0, rand(20) - 10, rand(20) + 40])
  54.       @_damage[num][0].bitmap = bitmap
  55.       @_damage[num][0].ox = 80 + self.viewport.ox
  56.       @_damage[num][0].oy = 20 + self.viewport.oy
  57.       @_damage[num][0].x = self.x
  58.       @_damage[num][0].y = self.y - self.oy / 2
  59.     end
  60.     def dispose_animation
  61.       if @_animation_sprites != nil
  62.         #sprite = @_animation_sprites[0]
  63.         #if sprite != nil
  64.         #  @@_reference_count[sprite.bitmap] -= 1
  65.           #if @@_reference_count[sprite.bitmap] == 0
  66.           #  sprite.bitmap.dispose
  67.           #end
  68.         #end
  69.         for sprite in @_animation_sprites
  70.           sprite.dispose
  71.         end
  72.         @_animation_sprites = nil
  73.         @_animation = nil
  74.       end
  75.     end
  76.     def dispose_animation
  77.       if @_animation_sprites != nil
  78.         #sprite = @_animation_sprites[0]
  79.         #if sprite != nil
  80.         #  @@_reference_count[sprite.bitmap] -= 1
  81.           #if @@_reference_count[sprite.bitmap] == 0
  82.           #  sprite.bitmap.dispose
  83.           #end
  84.         #end
  85.         for sprite in @_animation_sprites
  86.           sprite.dispose
  87.         end
  88.         @_animation_sprites = nil
  89.         @_animation = nil
  90.       end
  91.     end
  92.     def update
  93.       super
  94.       if @_whiten_duration > 0
  95.         @_whiten_duration -= 1
  96.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  97.       end
  98.       if @_appear_duration > 0
  99.         @_appear_duration -= 1
  100.         self.opacity = (16 - @_appear_duration) * 16
  101.       end
  102.       if @_escape_duration > 0
  103.         @_escape_duration -= 1
  104.         self.opacity = 256 - (32 - @_escape_duration) * 10
  105.       end
  106.       if @_collapse_duration > 0
  107.         @_collapse_duration -= 1
  108.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  109.       end
  110.       for damage in @_damage
  111.         if damage[1] > 0
  112.           damage[1] -= 1
  113.           damage[4] -= 3
  114.           damage[2] -= damage[4]
  115.           damage[0].x = self.x + (40 - damage[1]) * damage[3] / 10
  116.           damage[0].y = self.y - self.oy / 2 + damage[2] / 10
  117.           damage[0].z = 2960 + damage[1]
  118.           damage[0].opacity = 256 - (12 - damage[1]) * 32
  119.           if damage[1] == 0
  120.             damage[0].bitmap.dispose
  121.             damage[0].dispose
  122.             @_damage.delete(damage)
  123.           end
  124.         end
  125.       end
  126.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  127.         @_animation_duration -= 1
  128.         update_animation
  129.       end
  130.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  131.         update_loop_animation
  132.         @_loop_animation_index += 1
  133.         @_loop_animation_index %= @_loop_animation.frame_max
  134.       end
  135.       if @_blink
  136.         @_blink_count = (@_blink_count + 1) % 32
  137.         if @_blink_count < 16
  138.           alpha = (16 - @_blink_count) * 6
  139.         else
  140.           alpha = (@_blink_count - 16) * 6
  141.         end
  142.         self.color.set(255, 255, 255, alpha)
  143.       end
  144.       @@_animations.clear
  145.     end
  146.   end
  147. end
复制代码


而运行游戏时也看不到血条,
还差些什么?
作者: 吸血鬼王族    时间: 2007-7-1 10:32
标题: 地图上显示血条问题.
在main前加入以下脚本
  1. class Game_Actor < Game_Battler
  2. def now_exp
  3.    return @exp - @exp_list[@level]
  4. end
  5. def next_exp
  6.    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  7. end
  8. end
  9. #==============================================================================
  10. # ■ ARPG_Actor
  11. #------------------------------------------------------------------------------
  12. #  处理ARPG角色的类。
  13. #==============================================================================
  14. class ARPG_Actor
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对象
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     @actor = $game_party.actors[0]
  20.     @hp = $game_party.actors[0].hp
  21.     @sp = $game_party.actors[0].sp
  22.     @exp = $game_party.actors[0].now_exp
  23.     @states = $game_party.actors[0].states
  24.     @parameter = []
  25.     #Mess_Text.visible = true
  26.     #Mess_Text.ini
  27.   end

  28.   #--------------------------------------------------------------------------
  29.   # ● 生成精灵的实例
  30.   #--------------------------------------------------------------------------
  31.   def make_sprite
  32.    
  33.     @parameter[0] = Sprite.new
  34.     @parameter[0].bitmap = Bitmap.new(150,120)
  35.     @parameter[0].bitmap.blt(0,0,RPG::Cache.picture("l1"),Rect.new(0,0,150,120))
  36.     @parameter[0].x = 30;@parameter[0].y = 355
  37.    
  38.     @parameter[1] = Sprite.new
  39.     @parameter[1].bitmap = Bitmap.new(400,300)
  40.     @parameter[1].bitmap.blt(0,0,RPG::Cache.picture("01"),Rect.new(0,0,400,300))
  41.     @parameter[1].x = 0;@parameter[1].y = 180
  42.    
  43.     @parameter[2] = Sprite.new
  44.     @parameter[2].bitmap = Bitmap.new(400,300)
  45.     @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("04"),Rect.new(0,0,233,300))
  46.     h = $game_party.actors[0].hp * 233 / $game_party.actors[0].maxhp
  47.     @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("042"),Rect.new(0,0,h,300))
  48.     @parameter[2].x = 143;@parameter[2].y = 180
  49.    
  50.     @parameter[3] = Sprite.new
  51.     @parameter[3].bitmap = Bitmap.new(400,300)
  52.     @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("03"),Rect.new(0,0,237 ,300))
  53.     h = $game_party.actors[0].sp * 237 / $game_party.actors[0].maxsp
  54.     @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("032"),Rect.new(0,0,h,300))
  55.     @parameter[3].x = 143;@parameter[3].y = 180
  56.    
  57.     @parameter[4] = Sprite.new
  58.     @parameter[4].bitmap = Bitmap.new(400,300)
  59.     @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("02"),Rect.new(0,0,256,300))
  60.     h = $game_party.actors[0].now_exp * 256 / $game_party.actors[0].next_exp
  61.     @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("022"),Rect.new(0,0,h,300))
  62.     @parameter[4].x = 125;@parameter[4].y = 180
  63.    
  64.     @parameter[5] = Sprite.new
  65.     @parameter[5].bitmap = Bitmap.new(400,300)
  66.     @parameter[5].bitmap.blt(0,0,RPG::Cache.picture("001"),Rect.new(0,0,400,300))
  67.     @parameter[5].x = 0;@parameter[5].y = 180
  68.    
  69.    
  70.     @parameter.each{|e|e.z += 1}
  71.    
  72.     @parameter[6] = Sprite.new
  73.     @parameter[6].bitmap = Bitmap.new(128,32)
  74.     @parameter[6].x = 128
  75.     @parameter[6].y = 480 - 32
  76.    
  77.     draw_actor_state(@actor,0,0)
  78.    
  79.     @parameter.each{|e|e.z += 2}
  80.    

  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 描绘状态
  84.   #     actor : 角色
  85.   #     x     : 描画目标 X 坐标
  86.   #     y     : 描画目标 Y 坐标
  87.   #     width : 描画目标的宽
  88.   #--------------------------------------------------------------------------
  89.   def draw_actor_state(actor, x, y, width = 120)
  90.     pos = 0
  91.     for i in @actor.states
  92.       if $data_states[i].name == "战斗不能"
  93.         next
  94.       end
  95.       bitmap = RPG::Cache.icon($data_states[i].name)
  96.       @parameter[6].bitmap.blt(x+pos*bitmap.width, y, bitmap, Rect.new(0,0,bitmap.width,bitmap.height))
  97.     pos += 1
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 更新数值变化
  102.   #--------------------------------------------------------------------------
  103.   def refresh(type)
  104.     case type
  105.     when 0
  106.       @parameter[2].bitmap.clear
  107.       @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("04"),Rect.new(0,0,233,300))
  108.       h = @hp  * 233 / $game_party.actors[0].maxhp
  109.       @parameter[2].bitmap.blt(0,0,RPG::Cache.picture("042"),Rect.new(0,0,h,300))
  110.       return
  111.     when 1
  112.       @parameter[3].bitmap.clear
  113.       @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("03"),Rect.new(0,0,237,300))
  114.       h = @sp  * 237 / $game_party.actors[0].maxsp
  115.       @parameter[3].bitmap.blt(0,0,RPG::Cache.picture("032"),Rect.new(0,0,h,300))
  116.       return
  117.     when 2
  118.       @parameter[4].bitmap.clear
  119.       @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("02"),Rect.new(0,0,256,300))
  120.       h = @exp  * 256 / $game_party.actors[0].next_exp
  121.       @parameter[4].bitmap.blt(0,0,RPG::Cache.picture("022"),Rect.new(0,0,h,300))
  122.       return

  123.      when 3
  124.        @parameter[6].bitmap.clear
  125.        draw_actor_state(@actor,0,0)
  126.        @states = $game_party.actors[0].states
  127.       return
  128.     end


  129.   end
  130.   
  131.   #--------------------------------------------------------------------------
  132.   # ● 刷新
  133.   #--------------------------------------------------------------------------
  134.   def update
  135.     Mess_Text.update
  136.     if $refresh["states"]
  137.       refresh(3)
  138.       $refresh["states"] = false
  139.     end
  140.     if $refresh["item"]
  141.       @item_window.refresh(@actor)
  142.       $refresh["item"] = false
  143.     end
  144.     if $refresh["skill"]
  145.       @key_window.refresh(@actor)
  146.       $refresh["skill"] = false
  147.     end
  148.     if @actor.states.size > 0
  149.       for i in @actor.states
  150.         if @actor.states_time[i] > 0
  151.           @actor.states_time[i] -= 1
  152.         end
  153.         if @actor.states_time[i] <= 0
  154.           @actor.remove_state(i)
  155.         end
  156.       end
  157.       if @actor.states.size > 0 and Graphics.frame_count%10 == 0
  158.         $game_party.check_map_slip_damage
  159.       end
  160.     end
  161.     if Input.trigger?(Input::CTRL)
  162.       Mess_Text.clear
  163.       return
  164.     end
  165.     if Input.trigger?(Input::SHIFT)
  166.       Mess_Text.visible = !Mess_Text.visible
  167.       return
  168.     end
  169.     if @hp != $game_party.actors[0].hp
  170.       if @hp > $game_party.actors[0].hp
  171.         @hp -= 1
  172.       end
  173.       if @hp < $game_party.actors[0].hp
  174.         @hp += 1
  175.       end
  176.       refresh(0)
  177.     end
  178.     if @sp != $game_party.actors[0].sp
  179.       if @sp > $game_party.actors[0].sp
  180.         @sp -= 1
  181.       end
  182.       if @sp < $game_party.actors[0].sp
  183.         @sp += 1
  184.       end
  185.       refresh(1)
  186.     end
  187.     if @exp != $game_party.actors[0].now_exp
  188.       if @exp > $game_party.actors[0].now_exp
  189.         @exp -= 1
  190.       end
  191.       if @exp < $game_party.actors[0].now_exp
  192.         @exp += 1
  193.       end
  194.       refresh(2)
  195.     end
  196.   end
  197.   

  198. end
复制代码



  1. module RPG
  2.   class Sprite < ::Sprite   
  3.     def initialize(viewport = nil)
  4.       super(viewport)
  5.       @_whiten_duration = 0
  6.       @_appear_duration = 0
  7.       @_escape_duration = 0
  8.       @_collapse_duration = 0
  9.       @_damage_duration = 0
  10.       @_animation_duration = 0
  11.       @_blink = false
  12.       @_damage = []
  13.     end
  14.     def dispose_damage
  15.       for damage in @_damage
  16.         damage[0].bitmap.dispose
  17.         damage[0].dispose
  18.         @_damage.delete(damage)
  19.       end
  20.     end
  21.     def damage(value, critical)
  22.       dispose_damage
  23.       if value.is_a?(Numeric)
  24.         damage_string = value.abs.to_s
  25.       else
  26.         damage_string = value.to_s
  27.       end
  28.       bitmap = Bitmap.new(160, 48)
  29.       bitmap.font.name = "Arial Black"
  30.       bitmap.font.size = 20
  31.       bitmap.font.color.set(0, 0, 0)
  32.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  33.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  34.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  35.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  36.       if value.is_a?(Numeric) and value < 0
  37.         bitmap.font.color.set(176, 255, 144)
  38.       else
  39.         bitmap.font.color.set(255, 0, 0)
  40.       end
  41.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  42.       if critical
  43.         bitmap.font.size = 20
  44.         bitmap.font.color.set(0, 0, 0)
  45.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  46.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  47.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  48.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  49.         bitmap.font.color.set(255, 255, 255)
  50.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  51.       end
  52.       num = @_damage.size
  53.       @_damage.push([::Sprite.new, 40, 0, rand(20) - 10, rand(20) + 40])
  54.       @_damage[num][0].bitmap = bitmap
  55.       @_damage[num][0].ox = 80 + self.viewport.ox
  56.       @_damage[num][0].oy = 20 + self.viewport.oy
  57.       @_damage[num][0].x = self.x
  58.       @_damage[num][0].y = self.y - self.oy / 2
  59.     end
  60.     def dispose_animation
  61.       if @_animation_sprites != nil
  62.         #sprite = @_animation_sprites[0]
  63.         #if sprite != nil
  64.         #  @@_reference_count[sprite.bitmap] -= 1
  65.           #if @@_reference_count[sprite.bitmap] == 0
  66.           #  sprite.bitmap.dispose
  67.           #end
  68.         #end
  69.         for sprite in @_animation_sprites
  70.           sprite.dispose
  71.         end
  72.         @_animation_sprites = nil
  73.         @_animation = nil
  74.       end
  75.     end
  76.     def dispose_animation
  77.       if @_animation_sprites != nil
  78.         #sprite = @_animation_sprites[0]
  79.         #if sprite != nil
  80.         #  @@_reference_count[sprite.bitmap] -= 1
  81.           #if @@_reference_count[sprite.bitmap] == 0
  82.           #  sprite.bitmap.dispose
  83.           #end
  84.         #end
  85.         for sprite in @_animation_sprites
  86.           sprite.dispose
  87.         end
  88.         @_animation_sprites = nil
  89.         @_animation = nil
  90.       end
  91.     end
  92.     def update
  93.       super
  94.       if @_whiten_duration > 0
  95.         @_whiten_duration -= 1
  96.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  97.       end
  98.       if @_appear_duration > 0
  99.         @_appear_duration -= 1
  100.         self.opacity = (16 - @_appear_duration) * 16
  101.       end
  102.       if @_escape_duration > 0
  103.         @_escape_duration -= 1
  104.         self.opacity = 256 - (32 - @_escape_duration) * 10
  105.       end
  106.       if @_collapse_duration > 0
  107.         @_collapse_duration -= 1
  108.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  109.       end
  110.       for damage in @_damage
  111.         if damage[1] > 0
  112.           damage[1] -= 1
  113.           damage[4] -= 3
  114.           damage[2] -= damage[4]
  115.           damage[0].x = self.x + (40 - damage[1]) * damage[3] / 10
  116.           damage[0].y = self.y - self.oy / 2 + damage[2] / 10
  117.           damage[0].z = 2960 + damage[1]
  118.           damage[0].opacity = 256 - (12 - damage[1]) * 32
  119.           if damage[1] == 0
  120.             damage[0].bitmap.dispose
  121.             damage[0].dispose
  122.             @_damage.delete(damage)
  123.           end
  124.         end
  125.       end
  126.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  127.         @_animation_duration -= 1
  128.         update_animation
  129.       end
  130.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  131.         update_loop_animation
  132.         @_loop_animation_index += 1
  133.         @_loop_animation_index %= @_loop_animation.frame_max
  134.       end
  135.       if @_blink
  136.         @_blink_count = (@_blink_count + 1) % 32
  137.         if @_blink_count < 16
  138.           alpha = (16 - @_blink_count) * 6
  139.         else
  140.           alpha = (@_blink_count - 16) * 6
  141.         end
  142.         self.color.set(255, 255, 255, alpha)
  143.       end
  144.       @@_animations.clear
  145.     end
  146.   end
  147. end
复制代码


而运行游戏时也看不到血条,
还差些什么?
作者: secondsen    时间: 2007-7-1 13:47
显示血条,LZ可以自己做个显示血条的window再在scene_map调用,然后背景透明掉就可以了{/wx}
作者: 幻の飞鱼    时间: 2007-7-1 15:31
这个MS是夜想曲里的

这是一个显示血条的类

需要在sence_map里实例化这个类,还需要在合适的地方update,dispose。
就可以在地图显示
作者: 精灵使者    时间: 2007-7-1 16:09
我也想问句:我想做成地图清爽版的那种(也就是绿蓝血条的那种),能不能在上回那个金钱窗口教程里改?
http://rpg.blue/web/htm/news326.htm
不过,我倒发现个比较好的脚本。
http://rpg.blue/web/htm/news90.htm
作者: 幻の飞鱼    时间: 2007-7-1 16:16
用下面那个就可以了
我记得以前还有个有头像和红蓝血条的版本

还有4个开关控制窗口的- -因为后来都用图片来做了,就忘了放哪了
作者: 精灵使者    时间: 2007-7-1 16:26
以下引用幻の飞鱼于2007-7-1 8:16:00的发言:

用下面那个就可以了
我记得以前还有个有头像和红蓝血条的版本

还有4个开关控制窗口的- -因为后来都用图片来做了,就忘了放哪了

- -我打算要做rpg使用的,因为这里需要半arpg,也就是说游泳的时候要随时显示呼吸量(其实就是sp),sp耗尽则游戏结束的。
作者: 吸血鬼王族    时间: 2007-7-1 23:13
这个MS是夜想曲里的

这是一个显示血条的类

需要在sence_map里实例化这个类,还需要在合适的地方update,dispose。
就可以在地图显示

具体该怎么做?
因为用图片做比较漂亮,所以
我也想问句:我想做成地图清爽版的那种(也就是绿蓝血条的那种),能不能在上回那个金钱窗口教程里改?
http://rpg.blue/web/htm/news326.htm
不过,我倒发现个比较好的脚本。
http://rpg.blue/web/htm/news90.htm

这两个我觉得都不太漂亮




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1