| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 1 |  
| 积分 | 4 |  
| 经验 | 868 |  
| 最后登录 | 2014-6-14 |  
| 在线时间 | 628 小时 |  
 Lv2.观梦者 
	梦石0 星屑448 在线时间628 小时注册时间2011-9-27帖子3996 | 
| 本帖最后由 小白玩家 于 2011-12-17 11:32 编辑 
 战斗显血脚本,善用搜索,用法不用解释了吧,插在main前面
 复制代码# ————————————————————————————————————
 
#============================================================================== 
# ■ Window_BattleStatus 
#============================================================================== 
class Window_BattleStatus < Window_Base 
  #-------------------------------------------------------------------------- 
  # ● 公開インスタンス変数 
  #-------------------------------------------------------------------------- 
  attr_accessor :update_cp_only # CPメーターのみの更新 
  #-------------------------------------------------------------------------- 
  # ● オブジェクト初期化 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_initialize initialize 
  def initialize 
    # 初期化 
    @previous_hp = [] 
    @previous_sp = [] 
    # 呼び戻す 
    xrxs_bp7_initialize 
    # ↓Full-Viewの場合は下二行の # を消してください。 
    #self.opacity = 0 
    #self.back_opacity = 0 
  end 
  #-------------------------------------------------------------------------- 
  # ● リフレッシュ 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_refresh refresh 
  def refresh 
    # CPメーターの更新のみ の場合 
    if @update_cp_only 
      xrxs_bp7_refresh 
      return 
    end 
    # 変更するものがない場合、飛ばす 
    @item_max = $game_party.actors.size 
    bool = false 
    for i in 0...@item_max 
      actor = $game_party.actors[i] 
      if (@previous_hp[i] != actor.hp) or (@previous_sp[i] != actor.sp) 
        bool = true 
      end 
    end 
    return if bool == false 
    # 描写を開始 
    self.contents.clear 
    for i in 0...@item_max 
      actor = $game_party.actors[i] 
      actor_x = i * 160 + 21 
      # 歩行キャラグラフィックの描写 
      draw_actor_graphic(actor, actor_x - 0, 0) 
      # HP/SPメーターの描写 
      draw_actor_hp_meter_line(actor, actor_x, 52, 96, 12) 
      draw_actor_sp_meter_line(actor, actor_x, 84, 96, 12) 
      # HP数値の描写 
      self.contents.font.size = 24 # HP/SP数値の文字の大きさ 
      self.contents.font.color = Color.new(0,0,0,192) 
      self.contents.draw_text(actor_x, 40, 96, 24, actor.hp.to_s, 2) 
      self.contents.font.color = actor.hp == 0 ? knockout_color : 
      actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color 
      self.contents.draw_text(actor_x-2, 38, 96, 24, actor.hp.to_s, 2) 
      # SP数値の描写 
      self.contents.font.color = Color.new(0,0,0,192) 
      self.contents.draw_text(actor_x, 72, 96, 24, actor.sp.to_s, 2) 
      self.contents.font.color = actor.sp == 0 ? knockout_color : 
      actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color 
      self.contents.draw_text(actor_x-2, 70, 96, 24, actor.sp.to_s, 2) 
      # 用語「HP」と用語「SP」の描写 
      self.contents.font.size = 18 # 用語「HP/SP」の文字の大きさ 
      self.contents.font.color = Color.new(0,0,0,192) 
      self.contents.draw_text(actor_x+2, 32, 196, 24, $data_system.words.hp) 
      self.contents.draw_text(actor_x+2, 64, 196, 24, $data_system.words.sp) 
      self.contents.font.color = system_color # 用語「HP/SP」の文字の色 
      self.contents.draw_text(actor_x, 30, 196, 24, $data_system.words.hp) 
      self.contents.draw_text(actor_x, 62, 196, 24, $data_system.words.sp) 
      # ステートの描写 
      draw_actor_state(actor, actor_x, 100) 
      # 値を更新 
      @previous_hp[i] = actor.hp 
      @previous_hp[i] = actor.hp 
    end 
  end 
end 
#============================================================================== 
# ■ Window_Base 
#============================================================================== 
class Window_Base < Window 
  #-------------------------------------------------------------------------- 
  # ● HPメーター の描画 
  #-------------------------------------------------------------------------- 
  def draw_actor_hp_meter_line(actor, x, y, width = 156, height = 4) 
    w = width * actor.hp / [actor.maxhp,1].max 
    hp_color_1 = Color.new(255, 0, 0, 192) 
    hp_color_2 = Color.new(255, 255, 0, 192) 
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) 
    x -= 1 
    y += (height/4).floor 
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) 
    x -= 1 
    y += (height/4).ceil 
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) 
    x -= 1 
    y += (height/4).ceil 
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) 
  end 
  #-------------------------------------------------------------------------- 
  # ● SPメーター の描画 
  #-------------------------------------------------------------------------- 
  def draw_actor_sp_meter_line(actor, x, y, width = 156, height = 4) 
    w = width * actor.sp / [actor.maxsp,1].max 
    hp_color_1 = Color.new( 0, 0, 255, 192) 
    hp_color_2 = Color.new( 0, 255, 255, 192) 
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) 
    x -= 1 
    y += (height/4).floor 
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) 
    x -= 1 
    y += (height/4).ceil 
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) 
    x -= 1 
    y += (height/4).ceil 
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) 
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 名前の描画 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_draw_actor_name draw_actor_name 
  def draw_actor_name(actor, x, y) 
    xrxs_bp7_draw_actor_name(actor, x, y) if @draw_ban != true 
  end 
  #-------------------------------------------------------------------------- 
  # ● ステートの描画 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_draw_actor_state draw_actor_state 
  def draw_actor_state(actor, x, y, width = 120) 
    xrxs_bp7_draw_actor_state(actor, x, y, width) if @draw_ban != true 
  end 
  #-------------------------------------------------------------------------- 
  # ● HP の描画 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_draw_actor_hp draw_actor_hp 
  def draw_actor_hp(actor, x, y, width = 144) 
    xrxs_bp7_draw_actor_hp(actor, x, y, width) if @draw_ban != true 
  end 
  #-------------------------------------------------------------------------- 
  # ● SP の描画 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_draw_actor_sp draw_actor_sp 
  def draw_actor_sp(actor, x, y, width = 144) 
    xrxs_bp7_draw_actor_sp(actor, x, y, width) if @draw_ban != true 
  end 
end 
#============================================================================== 
# ■ Scene_Battle 
#============================================================================== 
class Scene_Battle 
  #-------------------------------------------------------------------------- 
  # ● フレーム更新 
  #-------------------------------------------------------------------------- 
  alias xrxs_bp7_update update 
  def update 
    xrxs_bp7_update 
    # メッセージウィンドウ表示中の場合 
    if $game_temp.message_window_showing 
      @status_window.update_cp_only = true       
    else 
      @status_window.update_cp_only = false 
    end 
  end 
end 
#============================================================================== 
# ◇ 外部ライブラリ 
#============================================================================== 
class Window_Base 
  #-------------------------------------------------------------------------- 
  # ● ライン描画 軽量版 by 桜雅 在土 
  #-------------------------------------------------------------------------- 
  def draw_lineght(start_x, start_y, end_x, end_y, start_color) 
    # 描写距離の計算。大きめに直角時の長さ。 
    distance = (start_x - end_x).abs + (start_y - end_y).abs 
    # 描写開始 
    for i in 1..distance 
      x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i 
      y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i 
      self.contents.set_pixel(x, y, start_color) 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● ライン描画 by 桜雅 在土 
  #-------------------------------------------------------------------------- 
  def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color) 
    # 描写距離の計算。大きめに直角時の長さ。 
    distance = (start_x - end_x).abs + (start_y - end_y).abs 
    # 描写開始 
    if end_color == start_color 
      for i in 1..distance 
        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i 
        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i 
        if width == 1 
          self.contents.set_pixel(x, y, start_color) 
        else 
          self.contents.fill_rect(x, y, width, width, start_color) 
        end 
      end 
    else 
      for i in 1..distance 
        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i 
        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i 
        r = start_color.red * (distance-i)/distance + end_color.red * i/distance 
        g = start_color.green * (distance-i)/distance + end_color.green * i/distance 
        b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance 
        a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance 
        if width == 1 
          self.contents.set_pixel(x, y, Color.new(r, g, b, a)) 
        else 
          self.contents.fill_rect(x, y, width, width, Color.new(r, g, b, a)) 
        end 
      end 
    end 
  end 
end 
#==============================================================================
 
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
 
#==============================================================================#==============================================================================
 
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
 
#==============================================================================
 
# ■ エネミーHP&SP(ver 0.98)
 
# □ カスタマイズポイント
 
#==============================================================================
 
module PLAN_HPSP_DRAW
 
FONT_NAME         = ["黑体", "楷体", "宋体"]    # フォント
 
FONT_SIZE         =  14                               # フォントサイズ
 
FONT_BOLD         = true                              # 太字
 
FONT_ITALIC       = true                              # 斜体
 
DRAW_NAME         = false                             # 名前の描画
 
DRAW_HP           = true                              # HP の描画
 
DRAW_SP           = true                              # SP の描画
 
DRAW_WIDTH        =  80                               # 描画幅
 
DRAW_HEIGHT       = 3 * 32                            # 描画高さ
 
DRAW_SPACE        =   0                               # 行间
 
DRAW_Y            =  36                               # Y 座标修正値
 
end
 
#==============================================================================
 
# ■ Sprite_Battler
 
#==============================================================================
 
class Sprite_Battler < RPG::Sprite
 
#--------------------------------------------------------------------------
 
# ● オブジェクト初期化
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_initialize initialize
 
def initialize(viewport, battler = nil)
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_initialize(viewport, battler)
 
  # エネミーの场合
 
  if @battler.is_a?(Game_Enemy)
 
    width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
 
    height = PLAN_HPSP_DRAW::DRAW_HEIGHT + 32
 
    x = @battler.screen_x - width / 2
 
    y = @battler.screen_y - height + 32 + PLAN_HPSP_DRAW::DRAW_Y
 
    @enemy_hpsp_window = Window_Base.new(x, y, width, height)
 
    @enemy_hpsp_window.contents = Bitmap.new(width - 32, height - 32)
 
    @enemy_hpsp_window.contents.font.name = PLAN_HPSP_DRAW::FONT_NAME
 
    @enemy_hpsp_window.contents.font.size = PLAN_HPSP_DRAW::FONT_SIZE
 
    @enemy_hpsp_window.contents.font.bold = PLAN_HPSP_DRAW::FONT_BOLD
 
    @enemy_hpsp_window.contents.font.italic = PLAN_HPSP_DRAW::FONT_ITALIC
 
    y = 0
 
    @old_enemy_hpsp = []
 
    one_line = ((PLAN_HPSP_DRAW::FONT_SIZE * 100 / 28) * 32) / 100
 
    if PLAN_HPSP_DRAW::DRAW_NAME
 
      @enemy_hpsp_window.draw_actor_name(@battler, 0, y, width - 32)
 
      y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
 
      @old_enemy_hpsp.push(@battler.name)
 
    end
 
    if PLAN_HPSP_DRAW::DRAW_HP
 
      @enemy_hpsp_window.draw_actor_hp2222(@battler, 0, y, width - 32)
 
      y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
 
      @old_enemy_hpsp.push(@battler.hp)
 
    end
 
    if PLAN_HPSP_DRAW::DRAW_SP
 
      @enemy_hpsp_window.draw_actor_sp2222(@battler, 0, y, width - 32)
 
      @old_enemy_hpsp.push(@battler.sp)
 
    end
 
    @enemy_hpsp_window.opacity = 0
 
    @enemy_hpsp_window.contents_opacity = 0
 
    @enemy_hpsp_window.z = -2
 
  end
 
end
 
#--------------------------------------------------------------------------
 
# ● 解放
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_dispose dispose
 
def dispose
 
  # エネミーの场合
 
  if @battler.is_a?(Game_Enemy)
 
    @enemy_hpsp_window.dispose
 
  end
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_dispose
 
end
 
#--------------------------------------------------------------------------
 
# ● フレーム更新
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_update update
 
def update
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_update
 
  # エネミーの场合
 
  if @battler.is_a?(Game_Enemy)
 
    @enemy_hpsp_window.visible = @battler_visible
 
  # スプライトの座标を设定
 
    width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
 
    @enemy_hpsp_window.x = self.x - width / 2
 
    @now_enemy_hpsp = []
 
    if PLAN_HPSP_DRAW::DRAW_NAME
 
      @now_enemy_hpsp.push(@battler.name)
 
    end
 
    if PLAN_HPSP_DRAW::DRAW_HP
 
      @now_enemy_hpsp.push(@battler.hp)
 
    end
 
    if PLAN_HPSP_DRAW::DRAW_SP
 
      @now_enemy_hpsp.push(@battler.sp)
 
    end
 
    if @old_enemy_hpsp != @now_enemy_hpsp and $game_temp.enemy_hpsp_refresh
 
      @old_enemy_hpsp = @now_enemy_hpsp
 
      @enemy_hpsp_window.contents.clear
 
      y = 0
 
      width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
 
      one_line = ((PLAN_HPSP_DRAW::FONT_SIZE * 100 / 28) * 32) / 100
 
      if PLAN_HPSP_DRAW::DRAW_NAME
 
        @enemy_hpsp_window.draw_actor_name(@battler, 0, y, width - 32)
 
        y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
 
      end
 
      if PLAN_HPSP_DRAW::DRAW_HP
 
        @enemy_hpsp_window.draw_actor_hp2222(@battler, 0, y, width - 32)
 
        y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
 
      end
 
      if PLAN_HPSP_DRAW::DRAW_SP
 
        @enemy_hpsp_window.draw_actor_sp2222(@battler, 0, y, width - 32)
 
      end
 
      Graphics.frame_reset
 
    end
 
  end
 
end
 
#--------------------------------------------------------------------------
 
# ● visible の设定
 
#--------------------------------------------------------------------------
 
if !method_defined?("plan_enemy_hpsp_draw_visible=")
 
  alias plan_enemy_hpsp_draw_visible= visible=
 
end
 
def visible=(bool)
 
  # エネミーの场合
 
  if @battler.is_a?(Game_Enemy)
 
    @enemy_hpsp_window.visible = bool
 
  end
 
  # 元のメソッドに戻す
 
  self.plan_enemy_hpsp_draw_visible=(bool)
 
end
 
#--------------------------------------------------------------------------
 
# ● 不透明度の设定
 
#--------------------------------------------------------------------------
 
if !method_defined?("plan_enemy_hpsp_draw_opacity=")
 
  alias plan_enemy_hpsp_draw_opacity= opacity=
 
end
 
def opacity=(n)
 
  # 元のメソッドに戻す
 
  self.plan_enemy_hpsp_draw_opacity=(n)
 
  # エネミーの场合
 
  if @battler.is_a?(Game_Enemy)
 
    @enemy_hpsp_window.contents_opacity = n
 
  end
 
end
 
end
 
#==============================================================================
 
# ■ Game_Temp
 
#==============================================================================
 
class Game_Temp
 
#--------------------------------------------------------------------------
 
# ● 公开インスタンス変数
 
#--------------------------------------------------------------------------
 
attr_accessor :enemy_hpsp_refresh
 
#--------------------------------------------------------------------------
 
# ● オブジェクト初期化
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_initialize initialize
 
def initialize
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_initialize
 
  @enemy_hpsp_refresh = false
 
end
 
end
 
#==============================================================================
 
# ■ Scene_Battle
 
#==============================================================================
 
class Scene_Battle
 
#--------------------------------------------------------------------------
 
# ● プレバトルフェーズ开始 (エネミー名+アルファベット用)
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_start_phase1 start_phase1
 
def start_phase1
 
  $game_temp.enemy_hpsp_refresh = true
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_start_phase1
 
end
 
#--------------------------------------------------------------------------
 
# ● パーティコマンドフェーズ开始 (エネミー名+アルファベット用)
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_start_phase2 start_phase2
 
def start_phase2
 
  $game_temp.enemy_hpsp_refresh = false
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_start_phase2
 
end
 
#--------------------------------------------------------------------------
 
# ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_update_phase4_step5 update_phase4_step5
 
def update_phase4_step5
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_update_phase4_step5
 
  $game_temp.enemy_hpsp_refresh = true
 
end
 
#--------------------------------------------------------------------------
 
# ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
 
#--------------------------------------------------------------------------
 
alias plan_enemy_hpsp_draw_update_phase4_step6 update_phase4_step6
 
def update_phase4_step6
 
  # 元のメソッドに戻す
 
  plan_enemy_hpsp_draw_update_phase4_step6
 
  $game_temp.enemy_hpsp_refresh = false
 
end
 
end
 
#==============================================================================
 
# ■ Window_Base
 
#==============================================================================
 
class Window_Base < Window
 
#--------------------------------------------------------------------------
 
# ● 名前の描画
 
#--------------------------------------------------------------------------
 
def draw_actor_name(actor, x, y, width = 120, align = 0)
 
  self.contents.font.color = normal_color
 
  align = 1 if $scene.is_a?(Scene_Battle)
 
  self.contents.draw_text(x, y, width, 32, actor.name, align)
 
end
 
#--------------------------------------------------------------------------
 
# ● ステートの描画
 
#--------------------------------------------------------------------------
 
def draw_actor_state(actor, x, y, width = 120)
 
  # 元のメソッドに戻す
 
  text = make_battler_state_text(actor, width, true)
 
  self.contents.draw_text(x, y, width, 32, text, 1)
 
end
 
end
 
#==============================================================================
 
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
 
#==============================================================================
 
class Window_Base < Window
 
def draw_actor_hp2222(actor, x, y, width = 100, height=8)
 
   y+=3
 
   olx = x
 
   oly = y
 
   w = width * actor.hp / [actor.maxhp,1].max
 
   hp_color_1 = Color.new(255, 0, 0, 192)
 
   hp_color_2 = Color.new(255, 255, 0, 192)
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
 
   x -= 1
 
   y += (height/4).floor
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
 
   x -= 1
 
   y += (height/4).ceil
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
 
   x -= 1
 
   y += (height/4).ceil
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
 
   x = olx
 
   y = oly-14  
 
   # 描绘字符串 "HP"
 
   self.contents.font.color = system_color
 
   self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
 
   # 计算描绘 MaxHP 所需的空间
 
   if width - 32 >= 108
 
     hp_x = x + width - 108
 
     flag = true
 
   elsif width - 32 >= 48
 
     hp_x = x + width - 48
 
     flag = false
 
   end
 
   # 描绘 HP
 
   self.contents.font.color = actor.hp == 0 ? knockout_color :
 
     actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
 
   self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
 
   # 描绘 MaxHP
 
   if flag
 
     self.contents.font.color = normal_color
 
     self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
 
     self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
 
   end   
 
end
 
def draw_actor_sp2222(actor, x, y, width = 100, height = 8)
 
   y+=3
 
   olx = x
 
   oly = y
 
   w = width * actor.sp / [actor.maxsp,1].max
 
   hp_color_1 = Color.new( 0, 0, 255, 192)
 
   hp_color_2 = Color.new( 0, 255, 255, 192)
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
 
   x -= 1
 
   y += (height/4).floor
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
 
   x -= 1
 
   y += (height/4).ceil
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
 
   x -= 1
 
   y += (height/4).ceil
 
   self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
 
   draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
 
   x = olx
 
   y = oly-14
 
   # 描绘字符串 "SP"
 
   self.contents.font.color = system_color
 
   self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
 
   # 计算描绘 MaxSP 所需的空间
 
   if width - 32 >= 108
 
     sp_x = x + width - 108
 
     flag = true
 
   elsif width - 32 >= 48
 
     sp_x = x + width - 48
 
     flag = false
 
   end
 
   # 描绘 SP
 
   self.contents.font.color = actor.sp == 0 ? knockout_color :
 
     actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
 
   self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
 
   # 描绘 MaxSP
 
   if flag
 
     self.contents.font.color = normal_color
 
     self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
 
     self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
 
   end   
 
end
 
#--------------------------------------------------------------------------
 
# ● ライン描画 by 桜雅 在土
 
#--------------------------------------------------------------------------
 
def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
 
   # 描写距离の计算。大きめに直角时の长さ。
 
   distance = (start_x - end_x).abs + (start_y - end_y).abs
 
   # 描写开始
 
   if end_color == start_color
 
     for i in 1..distance
 
       x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
 
       y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
 
       if width == 1
 
         self.contents.set_pixel(x, y, start_color)
 
       else
 
         self.contents.fill_rect(x, y, width, width, start_color)
 
       end
 
     end
 
   else
 
     for i in 1..distance
 
       x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
 
       y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
 
       r = start_color.red * (distance-i)/distance + end_color.red * i/distance
 
       g = start_color.green * (distance-i)/distance + end_color.green * i/distance
 
       b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
 
       a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
 
       if width == 1
 
         self.contents.set_pixel(x, y, Color.new(r, g, b, a))
 
       else
 
         self.contents.fill_rect(x, y, width, width, Color.new(r, g, b, a))
 
       end
 
     end
 
   end
 
end
 
end
 | 
 
1.jpg
(269.4 KB, 下载次数: 10)
 
 |