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

Project1

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

[已经解决] 我用了血条的脚本,测试的时候说NoMethodError怎么办?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
210
在线时间
85 小时
注册时间
2010-6-25
帖子
24
跳转到指定楼层
1
发表于 2010-8-26 16:12:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是这段脚本
  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. # 描绘角色血条
  11. #==============================================================================
  12. class Window_BattleStatus < Window_Base
  13. #--------------------------------------------------------------------------
  14. # ● 初始化
  15. #--------------------------------------------------------------------------
  16. alias xrxs_bp2_refresh refresh
  17. def refresh
  18.   xrxs_bp2_refresh
  19.   @item_max = $game_party.actors.size
  20.   for i in 0...$game_party.actors.size
  21.     actor = $game_party.actors[i]
  22.    
  23.     # 血条位置修改
  24.     actor_x = actor.screen_x + 10
  25.     actor_y = actor.screen_y - 270
  26.    
  27.     x1=self.x
  28.     y1=self.y

  29.     if actor.dead? == false
  30.       draw_actor_hp_meter(actor, actor_x, 1+actor_y,35)
  31.       draw_actor_sp_meter(actor, actor_x, 10+actor_y, 35)
  32.     end
  33.   end
  34. end
  35. end
  36. #==============================================================================
  37. # ■ Window_Base
  38. #==============================================================================
  39. class Window_Base < Window
  40. #--------------------------------------------------------------------------
  41. # ● HP描画
  42. #--------------------------------------------------------------------------
  43. def draw_actor_hp_meter(actor, x, y, width = 156, type = 0)
  44.   if type == 1 and actor.hp == 0
  45.     return
  46.   end
  47.   self.contents.fill_rect(x-1, y+82, width+2,6, Color.new(0, 0, 0, 255))
  48.   w = width * actor.hp / [actor.maxhp,1].max
  49.   self.contents.fill_rect(x, y+84, w,1, Color.new(255, 140, 140, 255))
  50.   self.contents.fill_rect(x, y+85, w,1, Color.new(180, 18, 0, 255))
  51.   self.contents.fill_rect(x, y+86, w,1, Color.new(209, 33, 0,255))
  52. self.contents.fill_rect(x, y+87, w,1, Color.new(180, 18, 0, 255))
  53. end
  54. #--------------------------------------------------------------------------
  55. # ● SP描画
  56. #--------------------------------------------------------------------------
  57. def draw_actor_sp_meter(actor, x, y, width = 156, type = 0)
  58.   if type == 1 and actor.hp == 0
  59.     return
  60.   end
  61.   self.contents.fill_rect(x-1, y+82, width+2,6, Color.new(0, 0, 0, 255))
  62.   w = width * actor.sp / [actor.maxsp,1].max
  63.   self.contents.fill_rect(x, y+84, w,1, Color.new(40, 176, 255, 255))
  64.   self.contents.fill_rect(x, y+85, w,1, Color.new(78, 10, 175, 255))
  65.   self.contents.fill_rect(x, y+86, w,1, Color.new(94, 10, 214, 255))
  66.   self.contents.fill_rect(x, y+87, w,1, Color.new(78, 10, 175, 255))
  67. end
  68. #--------------------------------------------------------------------------
  69. # ● exp描画
  70. #--------------------------------------------------------------------------
  71. def draw_actor_exp_meter(actor, x, y, width = 156, type = 0)
  72. if type == 1 and actor.hp == 0
  73.    return
  74. end
  75. self.contents.fill_rect(x-1, y+83, width+2,6, Color.new(0, 0, 0, 255))
  76. w = width * actor.now_exp/[ actor.next_exp,1].max
  77. self.contents.fill_rect(x, y+83, w,1, Color.new(77, 140, 140, 255))
  78. self.contents.fill_rect(x, y+85, w,1, Color.new(100, 220, 220, 255))
  79. self.contents.fill_rect(x, y+86, w,1, Color.new(77, 173, 173, 255))
  80. self.contents.fill_rect(x, y+87, w,1, Color.new(77, 207, 207, 255))
  81. self.contents.fill_rect(x, y+87, w,1, Color.new(77, 173, 173, 255))
  82. self.contents.fill_rect(x, y+87, w,1, Color.new(77, 140, 140, 255))
  83. end
  84. end
复制代码

Lv1.梦旅人

梦石
0
星屑
210
在线时间
85 小时
注册时间
2010-6-25
帖子
24
2
 楼主| 发表于 2010-8-26 16:12:49 | 只看该作者
24行有什么问题啊,版主快来啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
210
在线时间
85 小时
注册时间
2010-6-25
帖子
24
3
 楼主| 发表于 2010-8-26 16:13:49 | 只看该作者
我是一个新手,大家帮帮忙把!

评分

参与人数 1星屑 -40 收起 理由
IamI -40 连贴。

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
398
在线时间
972 小时
注册时间
2007-12-31
帖子
2137
4
发表于 2010-8-26 16:40:17 | 只看该作者
本帖最后由 liqunsz 于 2010-8-26 16:41 编辑

请上工程……
3小时内自顶+连帖小心被扣分……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2010-5-3
帖子
346
5
发表于 2010-8-26 16:50:49 | 只看该作者
脚本本身没问题,问题是lz游戏中用了什么脚本
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
210
在线时间
85 小时
注册时间
2010-6-25
帖子
24
6
 楼主| 发表于 2010-8-26 20:26:03 | 只看该作者
嗯,的确是
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
210
在线时间
85 小时
注册时间
2010-6-25
帖子
24
7
 楼主| 发表于 2010-8-26 20:28:07 | 只看该作者
我不怕q分,真的

点评

不管你怕不怕扣分,请遵守这里的版规,不然愚者总有办法让你不自在的。以上,望君珍重  发表于 2010-9-3 01:01
版主,快来扣分  发表于 2010-8-27 10:33
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
210
在线时间
78 小时
注册时间
2010-7-1
帖子
58
8
发表于 2010-8-26 20:39:02 | 只看该作者
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ HP/SP表示改造2 - KGC_HPSPAlter2 ◆
  3. #_/    ◇ Last update : 2007/12/23 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  HP/SP の表示形式を変更します。
  6. #_/============================================================================
  7. #_/  「システム系」スクリプト最上部
  8. #_/  ≪HP/SP表示改造[HPSPAlter]≫との併用不可
  9. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  10. #==============================================================================
  11. # ★ カスタマイズ項目 ★
  12. #==============================================================================

  13. module KGC
  14. module HPSPAlter2
  15.   # ◆ HP ゲージ画像
  16.   #  "Graphics/Pictures" から読み込む。
  17.   #  拡張子省略可。
  18.   #  HP_GAUGE = nil にすると、ゲージ非表示。
  19.   HP_GAUGE  = "gauge_hp3"
  20.   # ◆ SP ゲージ画像
  21.   SP_GAUGE  = "gauge_sp3"
  22.   # ◆ EXP (NEXT) ゲージ画像
  23.   #  ゲージの有無は、使用する機能に依存。
  24.   EXP_GAUGE = "gauge_exp2"

  25.   # ◆非戦闘時 HP ゲージ位置 [x, y]
  26.   #  HP 表示位置からの相対座標。
  27.   HP_POSITION = [0, 0]
  28.   # ◆非戦闘時 HP ゲージ長補正
  29.   #  ゲージの長さに加算。(負にすれば短くなる)
  30.   HP_LENGTH   = 28

  31.   # ◆非戦闘時 SP ゲージ位置 [x, y]
  32.   SP_POSITION = [0, 0]
  33.   # ◆非戦闘時 SP ゲージ長補正
  34.   SP_LENGTH   = 28

  35.   # ◆戦闘時 HP ゲージ位置 [x, y]
  36.   HP_POSITION_BATTLE = [0, 2]
  37.   # ◆戦闘時 HP ゲージ長補正
  38.   HP_LENGTH_BATTLE   = 28

  39.   # ◆戦闘時 SP ゲージ位置 [x, y]
  40.   SP_POSITION_BATTLE = [0, 2]
  41.   # ◆戦闘時 SP ゲージ長補正
  42.   SP_LENGTH_BATTLE   = 28

  43.   # ◆ EXP ゲージ位置 [x, y]
  44.   EXP_POSITION = [-28, 0]
  45.   # ◆ EXP ゲージ長補正
  46.   EXP_LENGTH   = 56

  47.   # ◆ HP/SP を画像で描画
  48.   #  画像を使用すると、HP/SP の描画が少しだけ速くなります。
  49.   DRAW_HPSP_IMAGE = true
  50.   # ◆数値画像
  51.   FIGURE_NORMAL = "figure2"
  52.   # ◆数値画像 (瀕死)
  53.   FIGURE_CRISIS = "figure2_crisis"
  54.   # ◆数値画像 (死亡)
  55.   FIGURE_DEAD   = "figure2_dead"

  56.   # ◆数値画像の描画位置補正 [x, y]
  57.   DIGIT_POSITION = [0, 8]
  58.   # ◆数値画像の描画間隔
  59.   #  使用する数値画像に合わせて調整。
  60.   DIGIT_SPACE = 11

  61.   # ◆ステータスを影文字で描画
  62.   #  導入した機能によって変化する場合あり。
  63.   TEXT_SHADOW = true
  64.   # ◆戦闘中は最大 HP/SP を描画しない
  65.   HIDE_MAXHPSP_BATTLE = true
  66.   # ◆文字列 "HP" を描画しない
  67.   #  「HP 9999/9999」の "HP" を描画しなくなる。
  68.   HIDE_HP_STRING   = true
  69.   # ◆文字列 "SP" を描画しない
  70.   HIDE_SP_STRING   = true
  71.   # ◆文字列 "NEXT" を描画しない
  72.   HIDE_NEXT_STRING = false

  73.   # ◆ゲージを流す
  74.   FLOW_GAUGE = true
  75.   # ◆ゲージが流れる速度
  76.   FLOW_SPEED = 4

  77.   # ◆差分ゲージを描画
  78.   DRAW_DIFF_GAUGE = true
  79.   # ◆差分ゲージ速度
  80.   #  数値が大きいほど減少が速い。
  81.   DIFF_GAUGE_SPEED = 5
  82. end
  83. end

  84. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  85. $imported = {} if $imported == nil
  86. $imported["HPSPAlter2"] = true

  87. #==============================================================================
  88. # ■ Game_Actor
  89. #==============================================================================

  90. class Game_Actor < Game_Battler
  91.   attr_reader :exp_list
  92. end

  93. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  94. #==============================================================================
  95. # ■ Window_Base
  96. #==============================================================================

  97. class Window_Base < Window
  98.   @@_hpsp_gauge_x = 0
  99.   #--------------------------------------------------------------------------
  100.   # ● ゲージ位置設定
  101.   #--------------------------------------------------------------------------
  102.   def self.set_hpsp_gauge_x(nx)
  103.     @@_hpsp_gauge_x = nx
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 数値描画
  107.   #     image : 数値画像
  108.   #--------------------------------------------------------------------------
  109.   def draw_number(image, x, y, width, height, number, align = 0)
  110.     string = number.to_s
  111.     space = KGC::HPSPAlter2::DIGIT_SPACE
  112.     rect = Rect.new(0, 0, image.width / 11, image.height)
  113.     dx = x + KGC::HPSPAlter2::DIGIT_POSITION[0]
  114.     case align
  115.     when 0  # 左寄せ
  116.       dx += space * string.length
  117.     when 1  # 中央寄せ
  118.       dx += (width -  space * string.length) / 2
  119.     when 2  # 右寄せ
  120.       dx += width - rect.width
  121.     end
  122.     dy = y + KGC::HPSPAlter2::DIGIT_POSITION[1]
  123.     (1..string.length).each { |i|
  124.       char = string[-i, 1]
  125.       if char == "/"
  126.         n = 10
  127.       elsif char =~ /\d/
  128.         n = char.to_i
  129.       else
  130.         next
  131.       end
  132.       rect.x = n * rect.width
  133.       self.contents.blt(dx, dy, image, rect)
  134.       dx -= space
  135.     }
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 描画メソッド取得
  139.   #--------------------------------------------------------------------------
  140.   def get_text_draw_method
  141.     if KGC::HPSPAlter2::TEXT_SHADOW
  142.       return self.contents.method(:draw_shadow_text)
  143.     else
  144.       return self.contents.method(:draw_text)
  145.     end
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● HP の描画
  149.   #--------------------------------------------------------------------------
  150.   def draw_actor_hp(actor, x, y, width = 144)
  151.     unless $game_temp.in_battle
  152.       draw_actor_hp_gauge(actor, x, y, width)
  153.     end

  154.     draw_method = get_text_draw_method
  155.     # 文字列 "HP" を描画
  156.     unless KGC::HPSPAlter2::HIDE_HP_STRING
  157.       self.contents.font.color = system_color
  158.       draw_method.call(x, y, 32, 32, $data_system.words.hp)
  159.     end

  160.     if KGC::HPSPAlter2::DRAW_HPSP_IMAGE
  161.       draw_actor_hp_image(actor, x, y, width)
  162.       return
  163.     end

  164.     # MaxHP を描画するスペースがあるか計算
  165.     hp_x = x + width - 48
  166.     flag = false
  167.     if !$game_temp.in_battle || !KGC::HPSPAlter2::HIDE_MAXHPSP_BATTLE
  168.       if width >= 108
  169.         hp_x = x + width - 108
  170.         flag = true
  171.       end
  172.     end
  173.     # HP を描画
  174.     self.contents.font.color = actor.hp == 0 ? knockout_color :
  175.       actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  176.     draw_method.call(hp_x, y, 48, 32, actor.hp.to_s, 2)
  177.     # MaxHP を描画
  178.     if flag
  179.       self.contents.font.color = normal_color
  180.       draw_method.call(hp_x + 48, y, 12, 32, "/", 1)
  181.       draw_method.call(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
  182.     end
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● HP を画像で描画
  186.   #--------------------------------------------------------------------------
  187.   def draw_actor_hp_image(actor, x, y, width)
  188.     # MaxHP を描画するスペースがあるか計算
  189.     hp_x = x + width - 48
  190.     flag = false
  191.     if !$game_temp.in_battle || !KGC::HPSPAlter2::HIDE_MAXHPSP_BATTLE
  192.       if width >= 108
  193.         hp_x = x + width - 108
  194.         flag = true
  195.       end
  196.     end
  197.     # HP を描画
  198.     if actor.hp == 0
  199.       image = RPG::Cache.picture(KGC::HPSPAlter2::FIGURE_DEAD)
  200.     elsif actor.hp <= actor.maxhp / 4
  201.       image = RPG::Cache.picture(KGC::HPSPAlter2::FIGURE_CRISIS)
  202.     else
  203.       image = RPG::Cache.picture(KGC::HPSPAlter2::FIGURE_NORMAL)
  204.     end
  205.     if flag
  206.       draw_number(image, hp_x, y, 108, 32, "#{actor.hp}/#{actor.maxhp}", 2)
  207.     else
  208.       draw_number(image, hp_x, y, 48, 32, actor.hp.to_s, 2)
  209.     end
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● SP の描画
  213.   #--------------------------------------------------------------------------
  214.   def draw_actor_sp(actor, x, y, width = 144)
  215.     unless $game_temp.in_battle
  216.       draw_actor_sp_gauge(actor, x, y, width)
  217.     end

  218.     draw_method = get_text_draw_method
  219.     # 文字列 "SP" を描画
  220.     unless KGC::HPSPAlter2::HIDE_SP_STRING
  221.       self.contents.font.color = system_color
  222.       draw_method.call(x, y, 32, 32, $data_system.words.sp)
  223.     end

  224.     if KGC::HPSPAlter2::DRAW_HPSP_IMAGE
  225.       draw_actor_sp_image(actor, x, y, width)
  226.       return
  227.     end

  228.     # MaxSP を描画するスペースがあるか計算
  229.     sp_x = x + width - 48
  230.     flag = false
  231.     if !$game_temp.in_battle || !KGC::HPSPAlter2::HIDE_MAXHPSP_BATTLE
  232.       if width >= 108
  233.         sp_x = x + width - 108
  234.         flag = true
  235.       end
  236.     end
  237.     # SP を描画
  238.     self.contents.font.color = actor.sp == 0 ? knockout_color :
  239.       actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  240.     draw_method.call(sp_x, y, 48, 32, actor.sp.to_s, 2)
  241.     # MaxSP を描画
  242.     if flag
  243.       self.contents.font.color = normal_color
  244.       draw_method.call(sp_x + 48, y, 12, 32, "/", 1)
  245.       draw_method.call(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
  246.     end
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● SP を画像で描画
  250.   #--------------------------------------------------------------------------
  251.   def draw_actor_sp_image(actor, x, y, width)
  252.     # MaxSP を描画するスペースがあるか計算
  253.     sp_x = x + width - 48
  254.     flag = false
  255.     if !$game_temp.in_battle || !KGC::HPSPAlter2::HIDE_MAXHPSP_BATTLE
  256.       if width >= 108
  257.         sp_x = x + width - 108
  258.         flag = true
  259.       end
  260.     end
  261.     # SP を描画
  262.     if actor.sp == 0
  263.       image = RPG::Cache.picture(KGC::HPSPAlter2::FIGURE_DEAD)
  264.     elsif actor.sp <= actor.maxsp / 4
  265.       image = RPG::Cache.picture(KGC::HPSPAlter2::FIGURE_CRISIS)
  266.     else
  267.       image = RPG::Cache.picture(KGC::HPSPAlter2::FIGURE_NORMAL)
  268.     end
  269.     if flag
  270.       draw_number(image, sp_x, y, 108, 32, "#{actor.sp}/#{actor.maxsp}", 2)
  271.     else
  272.       draw_number(image, sp_x, y, 48, 32, actor.sp.to_s, 2)
  273.     end
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● HP ゲージの描画
  277.   #--------------------------------------------------------------------------
  278.   def draw_actor_hp_gauge(actor, x, y, width)
  279.     if KGC::HPSPAlter2::HP_GAUGE == nil
  280.       return
  281.     end
  282.     bitmap = self.contents
  283.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::HP_GAUGE)
  284.     nx = x + KGC::HPSPAlter2::HP_POSITION[0]
  285.     ny = y + KGC::HPSPAlter2::HP_POSITION[1]
  286.     nw = width + KGC::HPSPAlter2::HP_LENGTH
  287.     gauge_width = calc_hp_gauge_width(actor, nw)
  288.     draw_gauge_back(bitmap, gauge, nx, ny, nw)
  289.     draw_gauge_inside(bitmap, gauge, nx, ny, nw, gauge_width)
  290.     draw_gauge_fore(bitmap, gauge, nx, ny, nw)
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● ゲージ背景の描画
  294.   #     bitmap : 描画先画像
  295.   #     image  : ゲージ画像
  296.   #     width  : ゲージ幅
  297.   #--------------------------------------------------------------------------
  298.   def draw_gauge_back(bitmap, image, x, y, width)
  299.     src_rect = Rect.new(0, 0, 32, 32)
  300.     bitmap.blt(x, y, image, src_rect)
  301.     src_rect.set(32, 0, 96, 32)
  302.     dest_rect = Rect.new(x + 32, y, width - 64, 32)
  303.     bitmap.stretch_blt(dest_rect, image, src_rect)
  304.     src_rect.set(128, 0, 32, 32)
  305.     bitmap.blt(x + width - 32, y, image, src_rect)
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● ゲージ内部の描画
  309.   #     bitmap : 描画先画像
  310.   #     image  : ゲージ画像
  311.   #     width  : ゲージ幅
  312.   #     gauge_width : ゲージ内部の幅
  313.   #--------------------------------------------------------------------------
  314.   def draw_gauge_inside(bitmap, image, x, y, width, gauge_width)
  315.     src_rect = Rect.new(@@_hpsp_gauge_x, 32, 96, 32)
  316.     src_rect.width = gauge_width * 96 / (width - 64)
  317.     dest_rect = Rect.new(x + 32, y, gauge_width, 32)
  318.     bitmap.stretch_blt(dest_rect, image, src_rect)
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● ゲージ前景の描画
  322.   #     bitmap : 描画先画像
  323.   #     image  : ゲージ画像
  324.   #     width  : ゲージ幅
  325.   #--------------------------------------------------------------------------
  326.   def draw_gauge_fore(bitmap, image, x, y, width)
  327.     src_rect = Rect.new(160, 0, 32, 32)
  328.     bitmap.blt(x, y, image, src_rect)
  329.     src_rect.set(192, 0, 96, 32)
  330.     dest_rect = Rect.new(x + 32, y, width - 64, 32)
  331.     bitmap.stretch_blt(dest_rect, image, src_rect)
  332.     src_rect.set(288, 0, 32, 32)
  333.     bitmap.blt(x + width - 32, y, image, src_rect)
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● HP ゲージ幅の計算
  337.   #--------------------------------------------------------------------------
  338.   def calc_hp_gauge_width(actor, width)
  339.     gw = actor.hp * (width - 64) / actor.maxhp
  340.     return [[gw, 0].max, width - 64].min
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● SP ゲージの描画
  344.   #--------------------------------------------------------------------------
  345.   def draw_actor_sp_gauge(actor, x, y, width)
  346.     if KGC::HPSPAlter2::SP_GAUGE == nil
  347.       return
  348.     end
  349.     bitmap = self.contents
  350.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::SP_GAUGE)
  351.     nx = x + KGC::HPSPAlter2::SP_POSITION[0]
  352.     ny = y + KGC::HPSPAlter2::SP_POSITION[1]
  353.     nw = width + KGC::HPSPAlter2::SP_LENGTH
  354.     gauge_width = calc_sp_gauge_width(actor, nw)
  355.     draw_gauge_back(bitmap, gauge, nx, ny, nw)
  356.     draw_gauge_inside(bitmap, gauge, nx, ny, nw, gauge_width)
  357.     draw_gauge_fore(bitmap, gauge, nx, ny, nw)
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● SP ゲージ幅の計算
  361.   #--------------------------------------------------------------------------
  362.   def calc_sp_gauge_width(actor, width)
  363.     gw = 0
  364.     if actor.maxsp > 0
  365.       gw = actor.sp * (width - 64) / actor.maxsp
  366.     end
  367.     return [[gw, 0].max, width - 64].min
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● EXP の描画
  371.   #--------------------------------------------------------------------------
  372.   alias draw_actor_exp_KGC_HPSPAlter2 draw_actor_exp
  373.   def draw_actor_exp(actor, x, y)
  374.     draw_actor_exp_gauge(self.contents, actor, x, y, 204)

  375.     draw_actor_exp_KGC_HPSPAlter2(actor, x, y)
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 次のレベルまでの EXP の描画
  379.   #--------------------------------------------------------------------------
  380.   def draw_actor_next_exp(actor, x, y, width = 144)
  381.     draw_actor_exp_gauge(self.contents, actor, x, y, width)

  382.     draw_method = get_text_draw_method
  383.     # 文字列 "NEXT" を描画
  384.     unless KGC::HPSPAlter2::HIDE_NEXT_STRING
  385.       self.contents.font.color = system_color
  386.       draw_method.call(x, y, 48, 32, "NEXT")
  387.     end

  388.     self.contents.font.color = normal_color
  389.     draw_method.call(x + 48, y, width - 48, 32, actor.next_rest_exp_s, 2)
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● EXP ゲージの描画
  393.   #--------------------------------------------------------------------------
  394.   def draw_actor_exp_gauge(bitmap, actor, x, y, width)
  395.     if KGC::HPSPAlter2::EXP_GAUGE == nil
  396.       return
  397.     end
  398.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::EXP_GAUGE)
  399.     nx = x + KGC::HPSPAlter2::EXP_POSITION[0]
  400.     ny = y + KGC::HPSPAlter2::EXP_POSITION[1]
  401.     nw = width + KGC::HPSPAlter2::EXP_LENGTH
  402.     gauge_width = calc_exp_gauge_width(actor, nw)
  403.     draw_gauge_back(bitmap, gauge, nx, ny, nw)
  404.     draw_gauge_inside(bitmap, gauge, nx, ny, nw, gauge_width)
  405.     draw_gauge_fore(bitmap, gauge, nx, ny, nw)
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● EXP ゲージ幅の計算
  409.   #--------------------------------------------------------------------------
  410.   def calc_exp_gauge_width(actor, width)
  411.     rest_exp = actor.next_rest_exp_s.to_i
  412.     next_exp = actor.next_exp_s.to_i - actor.exp_list[actor.level]
  413.     gx = x
  414.     gw = 0
  415.     if next_exp > 0
  416.       gw = (next_exp - rest_exp) * (width - 64) / next_exp
  417.     end
  418.     return [[gw, 0].max, width - 64].min
  419.   end
  420. end

  421. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  422. #==============================================================================
  423. # ■ Window_BattleStatus
  424. #==============================================================================

  425. class Window_BattleStatus < Window_Base
  426.   #--------------------------------------------------------------------------
  427.   # ● オブジェクト初期化
  428.   #--------------------------------------------------------------------------
  429.   alias initialize_KGC_HPSPAlter2 initialize
  430.   def initialize
  431.     @@_hpsp_gauge_x = 0
  432.     @_current_hp = {}
  433.     @_current_sp = {}
  434.     @_prev_hp = {}
  435.     @_prev_sp = {}
  436.     $game_party.actors.each { |actor|
  437.       @_current_hp[actor] = actor.hp
  438.       @_prev_hp[actor] = actor.hp
  439.       @_current_sp[actor] = actor.sp
  440.       @_prev_sp[actor] = actor.sp
  441.     }

  442.     create_hpsp_gauge_sprite

  443.     initialize_KGC_HPSPAlter2

  444.     @_hpsp_gauge_sprite.x = self.x + 16
  445.     @_hpsp_gauge_sprite.y = self.y + 16
  446.     @_hpsp_gauge_sprite.z = self.z
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 解放
  450.   #--------------------------------------------------------------------------
  451.   alias dispose_KGC_HPSPAlter2 dispose
  452.   def dispose
  453.     @_hpsp_gauge_sprite.bitmap.dispose
  454.     @_hpsp_gauge_sprite.dispose
  455.     @_hpsp_gauge_buffer.dispose
  456.     super
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● HP/SPゲージスプライト作成
  460.   #--------------------------------------------------------------------------
  461.   def create_hpsp_gauge_sprite(viewport = nil)
  462.     if @_hpsp_gauge_sprite != nil
  463.       sx = @_hpsp_gauge_sprite.x
  464.       sy = @_hpsp_gauge_sprite.y
  465.       sz = @_hpsp_gauge_sprite.z
  466.       @_hpsp_gauge_sprite.bitmap.dispose
  467.       @_hpsp_gauge_sprite.dispose
  468.       @_hpsp_gauge_buffer.dispose
  469.     else
  470.       sx = sy = sz = 0
  471.     end
  472.     @_hpsp_gauge_sprite = Sprite.new(viewport)
  473.     @_hpsp_gauge_sprite.bitmap = Bitmap.new(608, 128)
  474.     @_hpsp_gauge_sprite.x = sx
  475.     @_hpsp_gauge_sprite.y = sy
  476.     @_hpsp_gauge_sprite.z = sz

  477.     @_hpsp_gauge_buffer = Bitmap.new(
  478.       get_parameter_width + [KGC::HPSPAlter2::HP_LENGTH_BATTLE,
  479.         KGC::HPSPAlter2::SP_LENGTH_BATTLE].max,
  480.       128)
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● リフレッシュ
  484.   #--------------------------------------------------------------------------
  485.   BATTLE_STATUS_REFRESH_CHANGED = true
  486.   def refresh
  487.     @_hpsp_gauge_sprite.bitmap.clear
  488.     # ゲージ同期
  489.     sync_gauge

  490.     # パラメータ描画
  491.     pw = get_parameter_width
  492.     self.contents.clear
  493.     @item_max = $game_party.actors.size
  494.     for i in 0...$game_party.actors.size
  495.       actor = $game_party.actors[i]
  496.       actor_x = i * get_actor_space + 4
  497.       draw_actor_name(actor, actor_x, 0)
  498.       draw_actor_hp(actor, actor_x, 32, pw)
  499.       draw_actor_sp(actor, actor_x, 64, pw)
  500.       if @level_up_flags[i]
  501.         self.contents.font.color = normal_color
  502.         self.contents.draw_text(actor_x, 96, pw, 32, "LEVEL UP!")
  503.       else
  504.         draw_actor_state(actor, actor_x, 96)
  505.       end
  506.     end

  507.     # ゲージ描画
  508.     draw_hpsp_gauge_buffer(pw)
  509.     draw_hpsp_gauge(pw)
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ● パラメータ表示幅取得
  513.   #--------------------------------------------------------------------------
  514.   def get_parameter_width
  515.     return 120
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ● アクター間隔取得
  519.   #--------------------------------------------------------------------------
  520.   def get_actor_space
  521.     return 160
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● ゲージ同期
  525.   #--------------------------------------------------------------------------
  526.   def sync_gauge
  527.     $game_party.actors.each { |actor|
  528.       @_current_hp[actor] = actor.hp
  529.       @_current_sp[actor] = actor.sp
  530.       if @_prev_hp[actor] == nil
  531.         @_prev_hp[actor] = actor.hp
  532.       end
  533.       if @_prev_sp[actor] == nil
  534.         @_prev_sp[actor] = actor.sp
  535.       end
  536.     }
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # ● HP/SPゲージ用バッファ描画
  540.   #--------------------------------------------------------------------------
  541.   def draw_hpsp_gauge_buffer(width)
  542.     @_hpsp_gauge_buffer.clear

  543.     # HP
  544.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::HP_GAUGE)
  545.     dw = width + KGC::HPSPAlter2::HP_LENGTH_BATTLE
  546.     draw_gauge_back(@_hpsp_gauge_buffer, gauge, 0, 0, dw)
  547.     draw_gauge_fore(@_hpsp_gauge_buffer, gauge, 0, 32, dw)
  548.     # SP
  549.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::SP_GAUGE)
  550.     dw = width + KGC::HPSPAlter2::SP_LENGTH_BATTLE
  551.     draw_gauge_back(@_hpsp_gauge_buffer, gauge, 0, 64, dw)
  552.     draw_gauge_fore(@_hpsp_gauge_buffer, gauge, 0, 96, dw)
  553.   end
  554.   #--------------------------------------------------------------------------
  555.   # ● HP/SPゲージ描画
  556.   #--------------------------------------------------------------------------
  557.   def draw_hpsp_gauge(width)
  558.     @_hpsp_gauge_sprite.bitmap.clear
  559.     $game_party.actors.each_with_index { |actor, i|
  560.       actor_x = i * get_actor_space + 4
  561.       draw_actor_hp_gauge(actor, actor_x, 32, width)
  562.       draw_actor_sp_gauge(actor, actor_x, 64, width)
  563.     }
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # ● フレーム更新
  567.   #--------------------------------------------------------------------------
  568.   alias update_KGC_HPSPAlter2 update
  569.   def update
  570.     update_KGC_HPSPAlter2

  571.     # ゲージ画像を流す
  572.     if KGC::HPSPAlter2::FLOW_GAUGE
  573.       flow_gauge
  574.     end
  575.     draw_hpsp_gauge(get_parameter_width)
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● ゲージを流す
  579.   #--------------------------------------------------------------------------
  580.   def flow_gauge
  581.     @@_hpsp_gauge_x -= KGC::HPSPAlter2::FLOW_SPEED
  582.     if @@_hpsp_gauge_x < 0
  583.       @@_hpsp_gauge_x += 192
  584.     end
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● HP ゲージの描画
  588.   #--------------------------------------------------------------------------
  589.   def draw_actor_hp_gauge(actor, x, y, width)
  590.     if KGC::HPSPAlter2::HP_GAUGE == nil
  591.       return
  592.     end
  593.     bitmap = @_hpsp_gauge_sprite.bitmap
  594.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::HP_GAUGE)
  595.     nx = x + KGC::HPSPAlter2::HP_POSITION_BATTLE[0]
  596.     ny = y + KGC::HPSPAlter2::HP_POSITION_BATTLE[1]
  597.     nw = width + KGC::HPSPAlter2::HP_LENGTH_BATTLE
  598.     gauge_width = calc_hp_gauge_width(actor, nw)
  599.     diff_gauge_width = calc_hp_diff_gauge_width(actor, nw)

  600.     # 背景を転送
  601.     bitmap.blt(nx, ny, @_hpsp_gauge_buffer, Rect.new(0, 0, nw, 32))
  602.     # 内部を描画
  603.     draw_gauge_inside(bitmap, gauge, nx, ny, nw, gauge_width)
  604.     if diff_gauge_width != 0
  605.       draw_gauge_inside_diff(bitmap, gauge, nx, ny, nw,
  606.         gauge_width, diff_gauge_width)
  607.     end
  608.     # 前景を転送
  609.     bitmap.blt(nx, ny, @_hpsp_gauge_buffer, Rect.new(0, 32, nw, 32))
  610.   end
  611.   #--------------------------------------------------------------------------
  612.   # ● SP ゲージの描画
  613.   #--------------------------------------------------------------------------
  614.   def draw_actor_sp_gauge(actor, x, y, width)
  615.     if KGC::HPSPAlter2::SP_GAUGE == nil
  616.       return
  617.     end
  618.     bitmap = @_hpsp_gauge_sprite.bitmap
  619.     gauge = RPG::Cache.picture(KGC::HPSPAlter2::SP_GAUGE)
  620.     nx = x + KGC::HPSPAlter2::SP_POSITION_BATTLE[0]
  621.     ny = y + KGC::HPSPAlter2::SP_POSITION_BATTLE[1]
  622.     nw = width + KGC::HPSPAlter2::SP_LENGTH_BATTLE
  623.     gauge_width = calc_sp_gauge_width(actor, nw)
  624.     diff_gauge_width = calc_sp_diff_gauge_width(actor, nw)

  625.     # 背景を転送
  626.     bitmap.blt(nx, ny, @_hpsp_gauge_buffer, Rect.new(0, 64, nw, 32))
  627.     # 内部を描画
  628.     draw_gauge_inside(bitmap, gauge, nx, ny, nw, gauge_width)
  629.     if diff_gauge_width != 0
  630.       draw_gauge_inside_diff(bitmap, gauge, nx, ny, nw,
  631.         gauge_width, diff_gauge_width)
  632.     end
  633.     # 前景を転送
  634.     bitmap.blt(nx, ny, @_hpsp_gauge_buffer, Rect.new(0, 96, nw, 32))
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 差分ゲージの描画
  638.   #     bitmap : 対象ビットマップ
  639.   #     image  : ゲージ画像
  640.   #     width  : ゲージ幅
  641.   #     inside_gauge_width : ゲージ内部の幅
  642.   #     diff_gauge_width : 差分の幅
  643.   #--------------------------------------------------------------------------
  644.   def draw_gauge_inside_diff(bitmap, image, x, y, width,
  645.       inside_gauge_width, diff_gauge_width)
  646.     src_rect = Rect.new(0, 64, 96, 32)
  647.     src_rect.width = diff_gauge_width.abs * 96 / (width - 64)
  648.     dest_rect = Rect.new(x + 32, y, diff_gauge_width.abs, 32)
  649.     if diff_gauge_width > 0
  650.       # 増加
  651.       src_rect.x = 96
  652.       dest_rect.x += inside_gauge_width - dest_rect.width
  653.     else
  654.       # 減少
  655.       dest_rect.x += inside_gauge_width
  656.     end
  657.     bitmap.stretch_blt(dest_rect, image, src_rect)
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ● HP ゲージ幅の計算
  661.   #--------------------------------------------------------------------------
  662.   def calc_hp_gauge_width(actor, width)
  663.     gw = @_current_hp[actor] * (width - 64) / actor.maxhp
  664.     return [[gw, 0].max, width - 64].min
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● HP ゲージ差分の計算
  668.   #--------------------------------------------------------------------------
  669.   def calc_hp_diff_gauge_width(actor, width)
  670.     unless KGC::HPSPAlter2::DRAW_DIFF_GAUGE
  671.       return 0
  672.     end
  673.     # 差分調整
  674.     n = [actor.maxhp * KGC::HPSPAlter2::DIFF_GAUGE_SPEED / 1000, 1].max
  675.     if @_current_hp[actor] < @_prev_hp[actor]
  676.       # 減少中
  677.       @_prev_hp[actor] -= n
  678.       if @_current_hp[actor] > @_prev_hp[actor]
  679.         @_prev_hp[actor] = @_current_hp[actor]
  680.       end
  681.     elsif @_current_hp[actor] > @_prev_hp[actor]
  682.       # 増加中
  683.       @_prev_hp[actor] += n
  684.       if @_current_hp[actor] < @_prev_hp[actor]
  685.         @_prev_hp[actor] = @_current_hp[actor]
  686.       end
  687.     end
  688.     return (@_current_hp[actor] - @_prev_hp[actor]) * (width - 64) / actor.maxhp
  689.   end
  690.   #--------------------------------------------------------------------------
  691.   # ● SP ゲージ幅の計算
  692.   #--------------------------------------------------------------------------
  693.   def calc_sp_gauge_width(actor, width)
  694.     gw = 0
  695.     if actor.maxsp > 0
  696.       gw = @_current_sp[actor] * (width - 64) / actor.maxsp
  697.     end
  698.     return [[gw, 0].max, width - 64].min
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ● SP ゲージ差分の計算
  702.   #--------------------------------------------------------------------------
  703.   def calc_sp_diff_gauge_width(actor, width)
  704.     if !KGC::HPSPAlter2::DRAW_DIFF_GAUGE || actor.maxsp == 0
  705.       return 0
  706.     end
  707.     # 差分調整
  708.     n = [actor.maxsp * KGC::HPSPAlter2::DIFF_GAUGE_SPEED / 1000, 1].max
  709.     if @_current_sp[actor] < @_prev_sp[actor]
  710.       # 減少中
  711.       @_prev_sp[actor] -= n
  712.       if @_current_sp[actor] > @_prev_sp[actor]
  713.         @_prev_sp[actor] = @_current_sp[actor]
  714.       end
  715.     elsif @_current_sp[actor] > @_prev_sp[actor]
  716.       # 増加中
  717.       @_prev_sp[actor] += n
  718.       if @_current_sp[actor] < @_prev_sp[actor]
  719.         @_prev_sp[actor] = @_current_sp[actor]
  720.       end
  721.     end
  722.     return (@_current_sp[actor] - @_prev_sp[actor]) * (width - 64) / actor.maxsp
  723.   end
  724. end

  725. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  726. #==============================================================================
  727. # ■ Scene_Battle (分割定義 1)
  728. #==============================================================================

  729. class Scene_Battle
  730.   #--------------------------------------------------------------------------
  731.   # ● メイン処理
  732.   #--------------------------------------------------------------------------
  733.   alias main_KGC_HPSPAlter2 main
  734.   def main
  735.     main_KGC_HPSPAlter2

  736.     Window_Base.set_hpsp_gauge_x(0)
  737.   end
  738. end

  739. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  740. #==============================================================================
  741. # ■ Scene_Battle (分割定義 2)
  742. #==============================================================================

  743. class Scene_Battle
  744.   #--------------------------------------------------------------------------
  745.   # ● プレバトルフェーズ開始
  746.   #--------------------------------------------------------------------------
  747.   alias start_phase1_KGC_HPSPAlter2 start_phase1
  748.   def start_phase1
  749.     start_phase1_KGC_HPSPAlter2

  750.     @status_window.create_hpsp_gauge_sprite(@spriteset.viewport2)
  751.     @status_window.refresh
  752.   end
  753. end
复制代码
換吧
需要圖片



放到Graphics/Pictures

评分

参与人数 1星屑 +240 收起 理由
六祈 + 240 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
3 小时
注册时间
2010-7-28
帖子
307
9
发表于 2010-8-26 21:58:20 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
26 小时
注册时间
2009-11-27
帖子
156
10
发表于 2010-8-27 10:34:25 | 只看该作者
换一个血条脚本就可
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 21:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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