查看: 3197|回复: 3

[已经解决] XP如何在地图上显示人物血条

[复制链接]
梦石
0
星屑
57
在线时间
59 小时
注册时间
2012-8-1
回帖
5
发表于 2012-8-1 17:15:07 | 显示全部楼层 |阅读模式

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

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

×
拜托!!!!!!!!1
梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
回帖
744
发表于 2012-8-1 17:31:24 | 显示全部楼层
本帖最后由 原野清平 于 2012-8-1 17:34 编辑

018_在地图上创建窗口.rar (190.26 KB, 下载次数: 277) ���

或者用这个吧。

[pre lang="ruby" line="1"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================




#◆◇◆◇◆-----XRXS54. マップ上で簡易ウィンドウ表示 ver1.0 -----◇◆◇◆◇
# by 刻宮

# 「ディフォルト機能 & 仕様」
#  ・$WIN_2 = true。としても、スイッチがONでかつ、アクターが存在しなければ
#   ウィンドウは表示されません。この3要素が揃った時にウィンドウを表示します。
#  ・逆にこの要素が一つでも欠けるとウィンドウは自動的に非表示になります。
#  ・ツクール開始時はスイッチはOFFなので、ONにしないと表示されません。
#------------------------------------------------------------------
# カスタマイズポイント
#(*存在しないスイッチを指定されるとエラーになります。)


#----------------------------------------------------------------
# 使用说明(66RPG提示:本脚本其实难度不是很高,建议学习RGSS略有心得
#           的人尝试自己编写一个同类功能窗口)
#----------------------------------------------------------------
WIN_1     = true  # 是否使用1号窗口,true为使用,false为不使用
SWITVH_1  = 40    # 当此编号开关打开的时候窗口显示。如设置为40则40号开关打开,1号窗口显示
OPACITY_1 = 0   # 1号窗口透明度
X_1       = 0     # 1号窗口X坐标
Y_1       = 384   # 1号窗口Y坐标

$WIN_2    = true  # 是否使用2号窗口,true为使用,false为不使用
SWITVH_2  = 41    # 当此编号开关打开的时候窗口显示。如设置为41则41号开关打开,2号窗口显示
OPACITY_2 = 144   # 2号窗口透明度
X_2       = 160   # 2号窗口X坐标
Y_2       = 384   # 2号窗口Y坐标

WIN_3     = true  # 是否使用3号窗口,true为使用,false为不使用
SWITVH_3  = 42    # 当此编号开关打开的时候窗口显示。如设置为42则42号开关打开,3号窗口显示
OPACITY_3 = 144   # 3号窗口透明度
X_3       = 320   # 3号窗口X坐标
Y_3       = 384   # 3号窗口Y坐标

WIN_4     = true  # 是否使用4号窗口,true为使用,false为不使用
SWITVH_4  = 43    # 当此编号开关打开的时候窗口显示。如设置为43则43号开关打开,4号窗口显示
OPACITY_4 = 144   # 4号窗口透明度
X_4       = 480   # 4号窗口X坐标
Y_4       = 384   # 4号窗口Y坐标

SET_SP    = [true,false,true,true] # 决定各个窗口是否显示SP数值,true为显示,false为不显示。
OPTION    = 44    # 决定在对话的时候是否让窗口隐藏的开关编号。
                   # 比如设置为44,则当44号开关打开,则在对话的时候窗口隐藏
                   # 否则窗口不隐藏。
                  
                  
#=========================================================================
# ■ Scene_Map
#=========================================================================
class Scene_Map
#---------------------------------------------------------------------
# ● フレーム更新
#---------------------------------------------------------------------
alias main_tokimiya main
def main
   # 簡易ウィンドウ1を作成
     @simple_window1 = Window_MapStatus.new(X_1,Y_1,0)
     @simple_window1.opacity = OPACITY_1
     @simple_window1.visible = $game_switches[SWITVH_1]
     unless $game_party.actors.size > 0
       @simple_window1.visible = false
     end
   # 簡易ウィンドウ2を作成
     @simple_window2 = Window_MapStatus.new(X_2,Y_2,1)
     @simple_window2.opacity = OPACITY_2
     @simple_window2.visible = $game_switches[SWITVH_2]
     unless $game_party.actors.size > 1
       @simple_window2.visible = false
     end
   # 簡易ウィンドウ3を作成
     @simple_window3 = Window_MapStatus.new(X_3,Y_3,2)
     @simple_window3.opacity = OPACITY_3
     @simple_window3.visible = $game_switches[SWITVH_3]
     unless $game_party.actors.size > 2
       @simple_window3.visible = false
     end
   # 簡易ウィンドウ4を作成
     @simple_window4 = Window_MapStatus.new(X_4,Y_4,3)
     @simple_window4.opacity = OPACITY_4
     @simple_window4.visible = $game_switches[SWITVH_4]
     unless $game_party.actors.size > 3
       @simple_window4.visible = false
     end
   
     main_tokimiya   # 旧メソッドの呼び出し
   
   # 簡易ウィンドウの解放
     @simple_window1.dispose
     @simple_window2.dispose
     @simple_window3.dispose
     @simple_window4.dispose
end

#---------------------------------------------------------------------
# ● フレーム更新
#---------------------------------------------------------------------
alias update_tokimiya update
def update
   update_tokimiya   # 旧メソッドの呼び出し
   # 以前のパラメーターと相違があれば、内容を更新する。
   #
   # ウィンドウ1の更新。
   if WIN_1 == true and $game_party.actors.size > 0
     # データの更新
     actor = $game_party.actors[0]
     factor_1 = @simple_window1.before_1[0] != actor.name
     factor_2 = @simple_window1.before_1[1] != actor.hp
     factor_3 = @simple_window1.before_1[2] != actor.sp
     if factor_1 or factor_2 or factor_3
       @simple_window1.before_1[0] = actor.name
       @simple_window1.before_1[1] = actor.hp
       @simple_window1.before_1[2] = actor.sp
       @simple_window1.refresh(0)
     end
     # 非表示機能の実行
     if @message_window.visible == true and $game_switches[OPTION] == true
       @simple_window1.before_1[3] = false
       @simple_window1.visible = false
     elsif @simple_window1.before_1[3] != $game_switches[SWITVH_1]
       @simple_window1.before_1[3] = $game_switches[SWITVH_1]
       @simple_window1.visible = $game_switches[SWITVH_1]
     end
   end
   
   # ウィンドウ2の更新。
   if $WIN_2 == true and $game_party.actors.size > 1
     # データの更新
     actor = $game_party.actors[1]
     factor_1 = @simple_window2.before_2[0] != actor.name
     factor_2 = @simple_window2.before_2[1] != actor.hp
     factor_3 = @simple_window2.before_2[2] != actor.sp
     if factor_1 or factor_2 or factor_3
       @simple_window2.before_2[0] = actor.name
       @simple_window2.before_2[1] = actor.hp
       @simple_window2.before_2[2] = actor.sp
       @simple_window2.refresh(1)
       # ウィンドウを強制的に生成
       @simple_window2.before_2[3] = true
       @simple_window2.visible = true
     end
     # 非表示機能の実行
     if @message_window.visible == true and $game_switches[OPTION] == true
       @simple_window2.before_2[3] = false
       @simple_window2.visible = false
     elsif @simple_window2.before_2[3] != $game_switches[SWITVH_2]
       @simple_window2.before_2[3] = $game_switches[SWITVH_2]
       @simple_window2.visible = $game_switches[SWITVH_2]
     end
   # アクターが存在しないのにウィンドウが表示されたままの場合。
   elsif @simple_window2.visible == true and @simple_window2.before_2 != nil
     # ウィンドウを消去。
     @simple_window2.before_2[3] = false
     @simple_window2.visible = false
   end
   
   # ウィンドウ3の更新。
   if WIN_3 == true and $game_party.actors.size > 2
     # データの更新
     actor = $game_party.actors[2]
     factor_1 = @simple_window3.before_3[0] != actor.name
     factor_2 = @simple_window3.before_3[1] != actor.hp
     factor_3 = @simple_window3.before_3[2] != actor.sp
     if factor_1 or factor_2 or factor_3
       @simple_window3.before_3[0] = actor.name
       @simple_window3.before_3[1] = actor.hp
       @simple_window3.before_3[2] = actor.sp
       @simple_window3.refresh(2)
       # ウィンドウを強制的に生成
       @simple_window3.before_3[3] = true
       @simple_window3.visible = true
     end
     # 非表示機能の実行
     if @message_window.visible == true and $game_switches[OPTION] == true
       @simple_window3.before_3[3] = false
       @simple_window3.visible = false
     elsif @simple_window3.before_3[3] != $game_switches[SWITVH_3]
       @simple_window3.before_3[3] = $game_switches[SWITVH_3]
       @simple_window3.visible = $game_switches[SWITVH_3]
     end
   # アクターが存在しないのにウィンドウが表示されたままの場合。
   elsif @simple_window3.visible == true and @simple_window3.before_3 != nil
     # ウィンドウを消去。
     @simple_window3.before_3[3] = false
     @simple_window3.visible = false
   end
   
   # ウィンドウ4の更新。
   if WIN_4 == true and $game_party.actors.size > 3
     # データの更新
     actor = $game_party.actors[3]
     factor_1 = @simple_window4.before_4[0] != actor.name
     factor_2 = @simple_window4.before_4[1] != actor.hp
     factor_3 = @simple_window4.before_4[2] != actor.sp
     if factor_1 or factor_2 or factor_3
       @simple_window4.before_4[0] = actor.name
       @simple_window4.before_4[1] = actor.hp
       @simple_window4.before_4[2] = actor.sp
       @simple_window4.refresh(3)
       # ウィンドウを強制的に生成
       @simple_window4.before_4[3] = true
       @simple_window4.visible = true
     end
     # 非表示機能の実行
     if @message_window.visible == true and $game_switches[OPTION] == true
       @simple_window4.before_4[3] = false
       @simple_window4.visible = false
     elsif @simple_window4.before_4[3] != $game_switches[SWITVH_4]
       @simple_window4.before_4[3] = $game_switches[SWITVH_4]
       @simple_window4.visible = $game_switches[SWITVH_4]
     end
   # アクターが存在しないのにウィンドウが表示されたままの場合。
   elsif @simple_window4.visible == true and @simple_window4.before_4 != nil
     # ウィンドウを消去。
     @simple_window4.before_4[3] = false
     @simple_window4.visible = false
   end
end
end



#=========================================================================
# ■ Window_MapStatus,脚本来自www.66rpg.com,转载请注意说明
#=========================================================================
class Window_MapStatus < Window_Base
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor   :before_1              # 更新前のウィンドウ1のパラメーター
attr_accessor   :before_2              # 更新前のウィンドウ2のパラメーター
attr_accessor   :before_3              # 更新前のウィンドウ3のパラメーター
attr_accessor   :before_4              # 更新前のウィンドウ4のパラメーター
#---------------------------------------------------------------------
# ● フレーム更新
#---------------------------------------------------------------------
def initialize(x,y,id)
   #super(x,y,160,96)
   super(0,0,640,128)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.size = 18
   @before_1=[]
   @before_2=[]
   @before_3=[]
   @before_4=[]
    # 現段階のアクターのパラメーターと可視状態を記憶。
   data
   # 項目の描画。
   refresh(id)
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def data
   # アクター1の記憶(ただし、パーティが1名以上の場合)
   if $game_party.actors.size > 0
     actor = $game_party.actors[0]
     @before_1 = [actor.name, actor.hp, actor.sp,true]
   end
   # アクター2の記憶(ただし、パーティが2名以上の場合)
   if $game_party.actors.size > 1
     actor = $game_party.actors[1]
     @before_2 = [actor.name, actor.hp, actor.sp,true]
   end
   # アクター3の記憶(ただし、パーティが3名以上の場合)
   if $game_party.actors.size > 2
     actor = $game_party.actors[2]
     @before_3 = [actor.name, actor.hp, actor.sp,true]
   end
   # アクター3の記憶(ただし、パーティが4名以上の場合)
   if $game_party.actors.size > 3
     actor = $game_party.actors[3]
     @before_4 = [actor.name, actor.hp, actor.sp,true]
   end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def refresh(id)
   # 再描画のために一旦内容を破棄する
   self.contents.clear
   # 対応するアクターがいなければ、何もせずに終了する。
   actor = $game_party.actors[id]
   if actor == nil
     return
   end
   # 名前の描画
   draw_actor_name(actor, 0, -5)
   # HPの描画
   if SET_SP[id]
     draw_actor_hp_bar(actor, 0, 18)
   else
     draw_actor_hp_bar(actor, 0, 28)
   end
   # SPの描画
   if SET_SP[id]
     draw_actor_sp_bar(actor, 0, 36)
   end
end
end


class Window_Base < Window
#--------------------------------------------------------------------------
# ● HP ゲージの描画
#--------------------------------------------------------------------------
# オリジナルのHP描画を draw_actor_hp_original と名前変更
def draw_actor_hp_bar(actor, x, y, width = 144)
   # 変数rateに 現在のHP/MHPを代入
   if actor.maxhp != 0
     rate = actor.hp.to_f / actor.maxhp
   else
     rate = 0
   end
   # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
   # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
   # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
   # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
   # align3:ゲージタイプ 0:左詰め 1:右詰め
   plus_x = 0
   rate_x = 120#HP条的X
   plus_y = 25#HP条的Y
   plus_width = 0
   rate_width = 300 #HP条的高
   height = 10#HP条的高
   align1 = 1
   align2 = 2
   align3 = 0
   # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
   # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
   grade1 = 1
   grade2 = 0
   # 色設定。color1:外枠,color2:中枠
   # color3:空ゲージダークカラー,color4:空ゲージライトカラー
   # color5:実ゲージダークカラー,color6:実ゲージライトカラー
   color1 = Color.new(0, 0, 0, 192)
   color2 = Color.new(255, 255, 192, 192)
   color3 = Color.new(0, 0, 0, 192)
   color4 = Color.new(64, 0, 0, 192)
   color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
   color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
   
   

   
   
   
   
   # 変数spに描画するゲージの幅を代入
   if actor.maxhp != 0
     hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
   else
     hp = 0
   end
   # ゲージの描画
   gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
               width, plus_width + width * rate_width / 100,
               height, hp, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)

end
#--------------------------------------------------------------------------
# ● SP ゲージの描画
#--------------------------------------------------------------------------
# オリジナルのSP描画を draw_actor_sp_original と名前変更

def draw_actor_sp_bar(actor, x, y, width = 144)
   # 変数rateに 現在のSP/MSPを代入
   if actor.maxsp != 0
     rate = actor.sp.to_f / actor.maxsp
   else
     rate = 1
   end
   # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
   # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
   # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
   # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
   # align3:ゲージタイプ 0:左詰め 1:右詰め
   plus_x = 0
   rate_x = 120#SP条的X
   plus_y = 25#SP条的Y
   plus_width = 0
   rate_width = 300 #SP条宽
   height = 10#SP条的高
   align1 = 1
   align2 = 2
   align3 = 0
   # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
   # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
   grade1 = 1
   grade2 = 0
   # 色設定。color1:外枠,color2:中枠
   # color3:空ゲージダークカラー,color4:空ゲージライトカラー
   # color5:実ゲージダークカラー,color6:実ゲージライトカラー
   color1 = Color.new(0, 0, 0, 192)
   color2 = Color.new(255, 255, 192, 192)
   color3 = Color.new(0, 0, 0, 192)
   color4 = Color.new(0, 64, 0, 192)
   color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
   color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
   # 変数spに描画するゲージの幅を代入
   if actor.maxsp != 0
     sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
   else
     sp = (width + plus_width) * rate_width / 100
   end
   # ゲージの描画
   gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
               width, plus_width + width * rate_width / 100,
               height, sp, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)
   # オリジナルのSP描画処理を呼び出し

end  
end


def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
               color1, color2, color3, color4, color5, color6, grade1, grade2)
   case align1
   when 1
     x += (rect_width - width) / 2
   when 2
     x += rect_width - width
   end
   case align2
   when 1
     y -= height / 2
   when 2
     y -= height
   end
   # 枠描画
   self.contents.fill_rect(x, y, width, height, color1)
   self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
   if align3 == 0
     if grade1 == 2
       grade1 = 3
     end
     if grade2 == 2
       grade2 = 3
     end
   end
   if (align3 == 1 and grade1 == 0) or grade1 > 0
     color = color3
     color3 = color4
     color4 = color
   end
   if (align3 == 1 and grade2 == 0) or grade2 > 0
     color = color5
     color5 = color6
     color6 = color
   end
   # 空ゲージの描画
   self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
                                 color3, color4, grade1)
   if align3 == 1
     x += width - gauge
   end
   # 実ゲージの描画
   self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
                                 color5, color6, grade2)
end





class Bitmap
#--------------------------------------------------------------------------
# ● 矩形をグラデーション表示
#     color1 : スタートカラー
#     color2 : エンドカラー
#     align  :  0:横にグラデーション
#               1:縦にグラデーション
#               2:斜めにグラデーション(激重につき注意)
#--------------------------------------------------------------------------
def gradation_rect(x, y, width, height, color1, color2, align = 0)
   if align == 0
     for i in x...x + width
       red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
       green = color1.green +
               (color2.green - color1.green) * (i - x) / (width - 1)
       blue  = color1.blue +
               (color2.blue - color1.blue) * (i - x) / (width - 1)
       alpha = color1.alpha +
               (color2.alpha - color1.alpha) * (i - x) / (width - 1)
       color = Color.new(red, green, blue, alpha)
       fill_rect(i, y, 1, height, color)
     end
   elsif align == 1
     for i in y...y + height
       red   = color1.red +
               (color2.red - color1.red) * (i - y) / (height - 1)
       green = color1.green +
               (color2.green - color1.green) * (i - y) / (height - 1)
       blue  = color1.blue +
               (color2.blue - color1.blue) * (i - y) / (height - 1)
       alpha = color1.alpha +
               (color2.alpha - color1.alpha) * (i - y) / (height - 1)
       color = Color.new(red, green, blue, alpha)
       fill_rect(x, i, width, 1, color)
     end
   elsif align == 2
     for i in x...x + width
       for j in y...y + height
         red   = color1.red + (color2.red - color1.red) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         green = color1.green + (color2.green - color1.green) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         blue  = color1.blue + (color2.blue - color1.blue) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         alpha = color1.alpha + (color2.alpha - color1.alpha) *
                 ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         color = Color.new(red, green, blue, alpha)
         set_pixel(i, j, color)
       end
     end
   elsif align == 3
     for i in x...x + width
       for j in y...y + height
         red   = color1.red + (color2.red - color1.red) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         green = color1.green + (color2.green - color1.green) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         blue  = color1.blue + (color2.blue - color1.blue) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         alpha = color1.alpha + (color2.alpha - color1.alpha) *
               ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
         color = Color.new(red, green, blue, alpha)
         set_pixel(i, j, color)
       end
     end
   end
end
end



#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================[/pre]
回复

使用道具 举报

梦石
0
星屑
57
在线时间
59 小时
注册时间
2012-8-1
回帖
5
 楼主| 发表于 2012-8-2 09:49:32 | 显示全部楼层
原野清平 发表于 2012-8-1 17:31

工具是旧版本无法打开这个工程。不行啊!

点评

新建一个工程,把新建工程中的Game.rxproj替换到我的范例里。  发表于 2012-8-2 09:52
回复

使用道具 举报

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
回帖
744
发表于 2012-8-2 09:52:41 | 显示全部楼层
@bf21看点评不说话~
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部