| 
 
| 赞 | 3 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 22 |  
| 经验 | 46374 |  
| 最后登录 | 2025-7-3 |  
| 在线时间 | 1015 小时 |  
 Lv3.寻梦者 
	梦石0 星屑2245 在线时间1015 小时注册时间2015-10-17帖子1288 | 
| 
本帖最后由 fjm 于 2020-4-4 17:04 编辑
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 问下如何把图片1的血条位置移动到图片2的位置,再把怪物的名字也显示在上面,例如图片2的效果,知道的指点下,谢谢
 
 #encoding:utf-8#==============================================================================# ■ Sprite_Hp#------------------------------------------------------------------------------#  显示血条的精灵。根据 绑定敌人 的状态自动变化。#==============================================================================class Sprite_Hp < Sprite  #--------------------------------------------------------------------------  # ● 初始化常量  #--------------------------------------------------------------------------  H = 36                             #位图 高度  DUR = 0.5                           #动画 持续时间  FPS = 60                            #每秒 帧数  #--------------------------------------------------------------------------  # ● 初始化对象  #--------------------------------------------------------------------------  def initialize( viewport, enemy)    super(viewport)    initPara(enemy)    create_bitmap    update  end  #--------------------------------------------------------------------------  # ● 初始化参数  #--------------------------------------------------------------------------  def initPara(enemy)    @enemy = enemy                          #绑定敌人    @colorset = [ MyColor.red, MyColor.green, MyColor.blue, MyColor.purple, MyColor.yellow] #不同管血条的颜色,可以Color.new(r,g,b,a)来设置    @life = getLife.to_i                    #获取生命数     @tmphp = enemy.hp                       #用于动画的 临时血量    @perlife = ( @life == 0 ? enemy.hp : enemy.hp/@life)                                                       #每条命的血量    @dvalue = 0                             #临时血量差值    @anima = false                          #动画状态    setPara(@enemy.enemy.note)    @nameRect = Rect.new( 0, 0, @length, 18)    #名称矩形    @bgRect = Rect.new( 0, 18, @length, 18)     #背景矩形    @hlRect = Rect.new( 4, 20, @length - 16, 8)     #高光矩形  end  #--------------------------------------------------------------------------  # ● 设置参数(通过 注释)  #--------------------------------------------------------------------------  def setPara(note)    @offsetX = (/<OFFSETX\s*(\d+)>/ =~ note ? $1.to_i : 0)    @offsetY = (/<OFFSETY\s*(\d+)>/ =~ note ? $1.to_i : -20)    @length = (/<LEN\s*(\d+)>/ =~ note ? $1.to_i : 128)     #为了绘制高光,建议设置为 8 的倍数  end  #--------------------------------------------------------------------------  # ● 释放  #--------------------------------------------------------------------------  def dispose    self.bitmap.dispose    super  end  #--------------------------------------------------------------------------  # ● 生成位图  #--------------------------------------------------------------------------  def create_bitmap    self.bitmap = Bitmap.new( @length, H)    self.bitmap.fill_rect( @bgRect, color2)     #绘制背景矩形    self.bitmap.font.size = 16    self.bitmap.font.bold = true    self.bitmap.font.italic = true    self.bitmap.font.color.set(255, 255, 255)  end  #--------------------------------------------------------------------------  # ● 底层颜色(始终填充整个矩形)  #--------------------------------------------------------------------------  def color1    if @life == 0       MyColor.gray    else      @colorset[@life % @colorset.size - 1]    end  end  #--------------------------------------------------------------------------  # ● 血条颜色(变动矩形)  #--------------------------------------------------------------------------  def color2    @colorset[@life % @colorset.size ]  end  #--------------------------------------------------------------------------  # ● 获取生命条数  #--------------------------------------------------------------------------  def getLife    /<LIFE\s*(\d+)>/ =~ @enemy.enemy.note ? $1.to_s : 0  end  #--------------------------------------------------------------------------  # ● 血条长度  #--------------------------------------------------------------------------  def flexlen    if @tmphp % @perlife != 0      return (@tmphp % @perlife) * @length / @perlife    end    if (@tmphp != 0) && (@tmphp % @perlife == 0)      return @length     end  end  #--------------------------------------------------------------------------  # ● 更新画面  #--------------------------------------------------------------------------  def update    super    update_tmphp    update_life    update_bitmap    update_position    update_visibility  end  #--------------------------------------------------------------------------  # ● 更新临时血量(tmp Hp)  #--------------------------------------------------------------------------  def update_tmphp    if !@anima && (@tmphp != @enemy.hp)      @dvalue =  @tmphp - @enemy.hp      @anima = true      @tmphp = @tmphp - @dvalue/(DUR * FPS)    elsif @anima && (@tmphp == @enemy.hp)      @anima = false    elsif @anima && (@tmphp != @enemy.hp)      @tmphp = @tmphp - @dvalue/(DUR * FPS)      @tmphp = @enemy.hp if @tmphp < @enemy.hp    end  end  #--------------------------------------------------------------------------  # ● 更新命数(life)  #--------------------------------------------------------------------------  def update_life    @life = @life - 1 if @tmphp/@perlife < @life  end  #--------------------------------------------------------------------------  # ● 更新源位图(Source Bitmap)  #--------------------------------------------------------------------------  def update_bitmap    redraw  end  #--------------------------------------------------------------------------  # ● 重绘  #--------------------------------------------------------------------------  def redraw    self.bitmap.clear     self.bitmap.fill_rect( @bgRect, color1)     #绘制背景矩形    self.bitmap.fill_rect( @bgRect.x, @bgRect.y, flexlen, @bgRect.height, color2) if @tmphp != 0                                                #绘制血条矩形    self.bitmap.draw_border( @bgRect, MyColor.black, 2)    #绘制边框    draw_highlight( @hlRect)    #绘制高光    self.bitmap.draw_text(self.bitmap.rect, life_text, 2) if @life != 0      #绘制生命数(当生命数不为0)    self.bitmap.draw_text(@bgRect, @tmphp.to_i.to_s, 1)    #绘制生命值  end  #--------------------------------------------------------------------------  # ● 绘制高光  #--------------------------------------------------------------------------  def draw_highlight( dest_rect)    leftCorner = Rect.new(0,0,8,8)    middle = Rect.new(8,0,8,8)    rightCorner = Rect.new(16,0,8,8)    pic = Cache.picture("hightLight01")    x = dest_rect.x    y = dest_rect.y    i = 1    self.bitmap.stretch_blt(Rect.new( x, y, 8, 8), pic, leftCorner)    while x < (dest_rect.x + dest_rect.width - 8)      x = x + 8      self.bitmap.stretch_blt(Rect.new( x, y, 8, 8), pic, middle)    end    x = x + 8    self.bitmap.stretch_blt(Rect.new( x, y, 8, 8), pic, rightCorner)  end  #--------------------------------------------------------------------------  # ● 生成绘制内容  #--------------------------------------------------------------------------  def life_text    sprintf("x%2d", @life)  end  #--------------------------------------------------------------------------  # ● 更新位置  #--------------------------------------------------------------------------  def update_position    self.x = @enemy.screen_x - self.bitmap.width/2 + @offsetX    self.y = @enemy.screen_y + @offsetY    self.z = 200  end  #--------------------------------------------------------------------------  # ● 更新可视状态  #--------------------------------------------------------------------------  def update_visibility    self.visible = true if @enemy.hp != 0    self.visible = false if (@enemy.hp == 0) && !@anima   endend#encoding:utf-8#==============================================================================# ■ Spriteset_Battle#------------------------------------------------------------------------------#  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。#==============================================================================class Spriteset_Battle  #--------------------------------------------------------------------------  # ● 初始化对象  #--------------------------------------------------------------------------  def initialize    create_viewports    create_battleback1    create_battleback2    create_enemies    create_actors    create_pictures    create_timer    create_hp    update  end  #--------------------------------------------------------------------------  # ● Hp 精灵生成  #--------------------------------------------------------------------------  def create_hp    @hp_sprites = $game_troop.members.reverse.collect do |enemy|      Sprite_Hp.new(@viewport1, enemy)    end  end  #--------------------------------------------------------------------------  # ● 更新画面  #--------------------------------------------------------------------------  def update    update_battleback1    update_battleback2    update_enemies    update_actors    update_pictures    update_timer    update_hp    update_viewports  end  #--------------------------------------------------------------------------  # ● 更新敌人的精灵  #--------------------------------------------------------------------------  def update_hp    @hp_sprites.each {|sprite| sprite.update }  endend#encoding:utf-8#==============================================================================# ■ Bitmap_extension#------------------------------------------------------------------------------#  Bitmap类的扩展#==============================================================================class Bitmap  #--------------------------------------------------------------------------  # ● 绘制边框  #--------------------------------------------------------------------------  def draw_border( x, y, width, height, color, thick)    self.fill_rect( x, y, width, thick, color)    self.fill_rect( x + width - thick, y, thick, height, color)    self.fill_rect( x, y + height - thick, width, thick, color)    self.fill_rect( x, y, thick, height, color)  end  #--------------------------------------------------------------------------  # ● 绘制边框 参数为 Rect  #--------------------------------------------------------------------------  def draw_border( rect, color, thick)    self.fill_rect( rect.x, rect.y, rect.width, thick, color)    self.fill_rect( rect.x + rect.width - thick, rect.y, thick, rect.height, color)    self.fill_rect( rect.x, rect.y + rect.height - thick, rect.width, thick, color)    self.fill_rect( rect.x, rect.y, thick, rect.height, color)  endend#encoding:utf-8#==============================================================================# ■ Color_extension#------------------------------------------------------------------------------#  mColor类,包含常用色#==============================================================================class MyColor  #--------------------------------------------------------------------------  # ● 常用的颜色  #--------------------------------------------------------------------------  def self.black   ; Color.new(   0,   0,   0)   end  def self.white   ; Color.new( 255, 255, 255)   end  def self.red     ; Color.new( 255,   0,   0)   end  def self.green   ; Color.new(   0, 255,   0)   end  def self.blue    ; Color.new(   0,   0, 255)   end  def self.gray    ; Color.new( 128, 128, 128)   end  def self.yellow  ; Color.new( 255, 255,   0)   end  def self.purple  ; Color.new( 255,   0, 255)   end  def self.darkRed ; Color.new( 128,   0,   0)   end  def self.darkGreen;Color.new(   0, 128,   0)   end  def self.darkBlue; Color.new(   0,   0, 128)   end  def self.lighRed ; Color.new( 255, 128, 128)   endend
#encoding:utf-8 
#============================================================================== 
# ■ Sprite_Hp 
#------------------------------------------------------------------------------ 
#  显示血条的精灵。根据 绑定敌人 的状态自动变化。 
#============================================================================== 
class Sprite_Hp < Sprite 
  #-------------------------------------------------------------------------- 
  # ● 初始化常量 
  #-------------------------------------------------------------------------- 
  H = 36                             #位图 高度 
  DUR = 0.5                           #动画 持续时间 
  FPS = 60                            #每秒 帧数 
  #-------------------------------------------------------------------------- 
  # ● 初始化对象 
  #-------------------------------------------------------------------------- 
  def initialize( viewport, enemy) 
    super(viewport) 
    initPara(enemy) 
    create_bitmap 
    update 
  end 
  #-------------------------------------------------------------------------- 
  # ● 初始化参数 
  #-------------------------------------------------------------------------- 
  def initPara(enemy) 
    @enemy = enemy                          #绑定敌人 
    @colorset = [ MyColor.red, MyColor.green, MyColor.blue, MyColor.purple, MyColor.yellow] #不同管血条的颜色,可以Color.new(r,g,b,a)来设置 
    @life = getLife.to_i                    #获取生命数 
  
    @tmphp = enemy.hp                       #用于动画的 临时血量 
    @perlife = ( @life == 0 ? enemy.hp : enemy.hp/@life)            
                                            #每条命的血量 
    @dvalue = 0                             #临时血量差值 
    @anima = false                          #动画状态 
    setPara(@enemy.enemy.note) 
    @nameRect = Rect.new( 0, 0, @length, 18)    #名称矩形 
    @bgRect = Rect.new( 0, 18, @length, 18)     #背景矩形 
    @hlRect = Rect.new( 4, 20, @length - 16, 8)     #高光矩形 
  end 
  #-------------------------------------------------------------------------- 
  # ● 设置参数(通过 注释) 
  #-------------------------------------------------------------------------- 
  def setPara(note) 
    @offsetX = (/<OFFSETX\s*(\d+)>/ =~ note ? $1.to_i : 0) 
    @offsetY = (/<OFFSETY\s*(\d+)>/ =~ note ? $1.to_i : -20) 
    @length = (/<LEN\s*(\d+)>/ =~ note ? $1.to_i : 128)  
    #为了绘制高光,建议设置为 8 的倍数 
  end 
  #-------------------------------------------------------------------------- 
  # ● 释放 
  #-------------------------------------------------------------------------- 
  def dispose 
    self.bitmap.dispose 
    super 
  end 
  #-------------------------------------------------------------------------- 
  # ● 生成位图 
  #-------------------------------------------------------------------------- 
  def create_bitmap 
    self.bitmap = Bitmap.new( @length, H) 
    self.bitmap.fill_rect( @bgRect, color2)     #绘制背景矩形 
    self.bitmap.font.size = 16 
    self.bitmap.font.bold = true 
    self.bitmap.font.italic = true 
    self.bitmap.font.color.set(255, 255, 255) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 底层颜色(始终填充整个矩形) 
  #-------------------------------------------------------------------------- 
  def color1 
    if @life == 0  
      MyColor.gray 
    else 
      @colorset[@life % @colorset.size - 1] 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 血条颜色(变动矩形) 
  #-------------------------------------------------------------------------- 
  def color2 
    @colorset[@life % @colorset.size ] 
  end 
  #-------------------------------------------------------------------------- 
  # ● 获取生命条数 
  #-------------------------------------------------------------------------- 
  def getLife 
    /<LIFE\s*(\d+)>/ =~ @enemy.enemy.note ? $1.to_s : 0 
  end 
  #-------------------------------------------------------------------------- 
  # ● 血条长度 
  #-------------------------------------------------------------------------- 
  def flexlen 
    if @tmphp % @perlife != 0 
      return (@tmphp % @perlife) * @length / @perlife 
    end 
    if (@tmphp != 0) && (@tmphp % @perlife == 0) 
      return @length  
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新画面 
  #-------------------------------------------------------------------------- 
  def update 
    super 
    update_tmphp 
    update_life 
    update_bitmap 
    update_position 
    update_visibility 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新临时血量(tmp Hp) 
  #-------------------------------------------------------------------------- 
  def update_tmphp 
    if !@anima && (@tmphp != @enemy.hp) 
      @dvalue =  @tmphp - @enemy.hp 
      @anima = true 
      @tmphp = @tmphp - @dvalue/(DUR * FPS) 
    elsif @anima && (@tmphp == @enemy.hp) 
      @anima = false 
    elsif @anima && (@tmphp != @enemy.hp) 
      @tmphp = @tmphp - @dvalue/(DUR * FPS) 
      @tmphp = @enemy.hp if @tmphp < @enemy.hp 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新命数(life) 
  #-------------------------------------------------------------------------- 
  def update_life 
    @life = @life - 1 if @tmphp/@perlife < @life 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新源位图(Source Bitmap) 
  #-------------------------------------------------------------------------- 
  def update_bitmap 
    redraw 
  end 
  #-------------------------------------------------------------------------- 
  # ● 重绘 
  #-------------------------------------------------------------------------- 
  def redraw 
    self.bitmap.clear 
  
    self.bitmap.fill_rect( @bgRect, color1)     #绘制背景矩形 
    self.bitmap.fill_rect( @bgRect.x, @bgRect.y, flexlen, @bgRect.height, color2) if @tmphp != 0 
                                                #绘制血条矩形 
    self.bitmap.draw_border( @bgRect, MyColor.black, 2) 
    #绘制边框 
    draw_highlight( @hlRect) 
    #绘制高光 
    self.bitmap.draw_text(self.bitmap.rect, life_text, 2) if @life != 0   
    #绘制生命数(当生命数不为0) 
    self.bitmap.draw_text(@bgRect, @tmphp.to_i.to_s, 1) 
    #绘制生命值 
  end 
  #-------------------------------------------------------------------------- 
  # ● 绘制高光 
  #-------------------------------------------------------------------------- 
  def draw_highlight( dest_rect) 
    leftCorner = Rect.new(0,0,8,8) 
    middle = Rect.new(8,0,8,8) 
    rightCorner = Rect.new(16,0,8,8) 
    pic = Cache.picture("hightLight01") 
    x = dest_rect.x 
    y = dest_rect.y 
    i = 1 
    self.bitmap.stretch_blt(Rect.new( x, y, 8, 8), pic, leftCorner) 
    while x < (dest_rect.x + dest_rect.width - 8) 
      x = x + 8 
      self.bitmap.stretch_blt(Rect.new( x, y, 8, 8), pic, middle) 
    end 
    x = x + 8 
    self.bitmap.stretch_blt(Rect.new( x, y, 8, 8), pic, rightCorner) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 生成绘制内容 
  #-------------------------------------------------------------------------- 
  def life_text 
    sprintf("x%2d", @life) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新位置 
  #-------------------------------------------------------------------------- 
  def update_position 
    self.x = @enemy.screen_x - self.bitmap.width/2 + @offsetX 
    self.y = @enemy.screen_y + @offsetY 
    self.z = 200 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新可视状态 
  #-------------------------------------------------------------------------- 
  def update_visibility 
    self.visible = true if @enemy.hp != 0 
    self.visible = false if (@enemy.hp == 0) && !@anima  
  end 
end 
#encoding:utf-8 
#============================================================================== 
# ■ Spriteset_Battle 
#------------------------------------------------------------------------------ 
#  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。 
#============================================================================== 
class Spriteset_Battle 
  #-------------------------------------------------------------------------- 
  # ● 初始化对象 
  #-------------------------------------------------------------------------- 
  def initialize 
    create_viewports 
    create_battleback1 
    create_battleback2 
    create_enemies 
    create_actors 
    create_pictures 
    create_timer 
    create_hp 
    update 
  end 
  #-------------------------------------------------------------------------- 
  # ● Hp 精灵生成 
  #-------------------------------------------------------------------------- 
  def create_hp 
    @hp_sprites = $game_troop.members.reverse.collect do |enemy| 
      Sprite_Hp.new(@viewport1, enemy) 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新画面 
  #-------------------------------------------------------------------------- 
  def update 
    update_battleback1 
    update_battleback2 
    update_enemies 
    update_actors 
    update_pictures 
    update_timer 
    update_hp 
    update_viewports 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新敌人的精灵 
  #-------------------------------------------------------------------------- 
  def update_hp 
    @hp_sprites.each {|sprite| sprite.update } 
  end 
end 
#encoding:utf-8 
#============================================================================== 
# ■ Bitmap_extension 
#------------------------------------------------------------------------------ 
#  Bitmap类的扩展 
#============================================================================== 
class Bitmap 
  #-------------------------------------------------------------------------- 
  # ● 绘制边框 
  #-------------------------------------------------------------------------- 
  def draw_border( x, y, width, height, color, thick) 
    self.fill_rect( x, y, width, thick, color) 
    self.fill_rect( x + width - thick, y, thick, height, color) 
    self.fill_rect( x, y + height - thick, width, thick, color) 
    self.fill_rect( x, y, thick, height, color) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 绘制边框 参数为 Rect 
  #-------------------------------------------------------------------------- 
  def draw_border( rect, color, thick) 
    self.fill_rect( rect.x, rect.y, rect.width, thick, color) 
    self.fill_rect( rect.x + rect.width - thick, rect.y, thick, rect.height, color) 
    self.fill_rect( rect.x, rect.y + rect.height - thick, rect.width, thick, color) 
    self.fill_rect( rect.x, rect.y, thick, rect.height, color) 
  end 
end 
#encoding:utf-8 
#============================================================================== 
# ■ Color_extension 
#------------------------------------------------------------------------------ 
#  mColor类,包含常用色 
#============================================================================== 
class MyColor 
  #-------------------------------------------------------------------------- 
  # ● 常用的颜色 
  #-------------------------------------------------------------------------- 
  def self.black   ; Color.new(   0,   0,   0)   end 
  def self.white   ; Color.new( 255, 255, 255)   end 
  def self.red     ; Color.new( 255,   0,   0)   end 
  def self.green   ; Color.new(   0, 255,   0)   end 
  def self.blue    ; Color.new(   0,   0, 255)   end 
  def self.gray    ; Color.new( 128, 128, 128)   end 
  def self.yellow  ; Color.new( 255, 255,   0)   end 
  def self.purple  ; Color.new( 255,   0, 255)   end 
  def self.darkRed ; Color.new( 128,   0,   0)   end 
  def self.darkGreen;Color.new(   0, 128,   0)   end 
  def self.darkBlue; Color.new(   0,   0, 128)   end 
  def self.lighRed ; Color.new( 255, 128, 128)   end 
end 
 | 
 |