Project1

标题: 整合脚本 (掉血从右到左 [打印本页]

作者: fm303018    时间: 2013-5-11 12:54
标题: 整合脚本 (掉血从右到左
本帖最后由 亿万星辰 于 2013-5-11 13:47 编辑

game186_宿命脚本
  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #  バトル画面でパーティメンバーのステータスを表示するウィンドウです。
  5. #==============================================================================

  6. class Window_BattleStatus < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● オブジェクト初期化
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 240, 640, 240)
  12.     self.contents = Bitmap.new(width - 32, height - 32)
  13.     self.opacity = 0
  14.     @background_window = Window_Base.new(0, 320, 640, 160)
  15.     @background_window.opacity = 0
  16.     @menu = Sprite.new
  17.     @menu.bitmap = RPG::Cache.picture("战斗状态")
  18.     @menu.y = 320
  19.     @menu.z += 1
  20.     @level_up_flags = [false, false, false, false]
  21.     refresh
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 解放
  25.   #--------------------------------------------------------------------------
  26.   def dispose
  27.     @background_window.dispose
  28.     @menu.bitmap.dispose
  29.     super
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● レベルアップフラグの設定
  33.   #     actor_index : アクターインデックス
  34.   #--------------------------------------------------------------------------
  35.   def level_up(actor_index)
  36.     @level_up_flags[actor_index] = true
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● レベルアップ表示
  40.   #--------------------------------------------------------------------------
  41.   def refresh_level_up
  42.     for i in 0...$game_party.actors.size
  43.       if @level_up_flags[i]
  44.         bitmap = RPG::Cache.picture("System/Battle-LevelUp")
  45.         src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  46.         self.contents.blt(i * 160, 0, bitmap, src_rect)
  47.       end
  48.     end
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● リフレッシュ
  52.   #--------------------------------------------------------------------------
  53.   def refresh
  54.     self.contents.clear
  55.     @item_max = $game_party.actors.size
  56.     for i in 0...$game_party.actors.size
  57.       actor = $game_party.actors[i]
  58.       actor_x = i * 160
  59.        y = height - 200
  60.       #---------------------------头象------------------------------
  61.       testname = actor.battler_name+"_f.png"
  62.      bitmap=Bitmap.new("Graphics/Battlers/#{testname}")
  63.       src_rect = Rect.new(0,0, bitmap.width, bitmap.height) #——可自己调整大小
  64.       self.contents.blt(actor_x+16, 65, bitmap, src_rect)
  65.       #-----------------------------------------------------------
  66.        draw_actor_hp(actor, actor_x, y + 96, 14)
  67.       draw_actor_sp(actor, actor_x, y + 124, 14)
  68.       draw_actor_hpbar(actor, actor_x + 16, y + 120)
  69.       draw_actor_spbar(actor, actor_x + 16, y + 148)
  70.       draw_actor_state(actor, actor_x+92, y + 80)
  71.       draw_actor_name(actor, actor_x+95, y + 32)
  72.     end
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ★ HPバー の描画
  76.   #     actor : アクター
  77.   #     x     : 描画先 X 座標
  78.   #     y     : 描画先 Y 座標
  79.   #--------------------------------------------------------------------------
  80.   def draw_actor_hpbar(actor, x, y)
  81.     bitmap = RPG::Cache.picture("空槽")
  82.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  83.     self.contents.blt(x, y, bitmap, src_rect)
  84.     bitmap = RPG::Cache.picture("血槽")
  85.     cx = actor.hp * 100 / actor.maxhp
  86.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  87.     self.contents.blt(x + 103 - cx, y + 2, bitmap, src_rect)
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ★ SPバー の描画
  91.   #     actor : アクター
  92.   #     x     : 描画先 X 座標
  93.   #     y     : 描画先 Y 座標
  94.   #--------------------------------------------------------------------------
  95.   def draw_actor_spbar(actor, x, y)
  96.     bitmap = RPG::Cache.picture("空槽")
  97.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  98.     self.contents.blt(x, y, bitmap, src_rect)
  99.     bitmap = RPG::Cache.picture("气槽")
  100.     cx = actor.sp * 100 / actor.maxsp
  101.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  102.     self.contents.blt(x + 103 - cx, y + 2, bitmap, src_rect)
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● HP の描画
  106.   #     actor : アクター
  107.   #     x     : 描画先 X 座標
  108.   #     y     : 描画先 Y 座標
  109.   #--------------------------------------------------------------------------
  110.   def draw_actor_hp(actor, x, y, size = 16)
  111.     bitmap = RPG::Cache.picture("HP字样")
  112.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  113.     self.contents.blt(x, y + 4, bitmap, src_rect)
  114.     # HP を描画
  115.     x += 32
  116.     self.contents.font.size = size
  117.     self.contents.font.italic = true
  118.     color = actor.hp == 0 ? knockout_color :
  119.       actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  120.     draw_text_custom(x, y, 42, 32, actor.hp.to_s, color, 2)
  121.     self.contents.font.italic = false
  122.     draw_text_normal(x + 42, y, 16, 32, "/", 1)
  123.     self.contents.font.italic = true
  124.     # MaxHP を描画
  125.     draw_text_normal(x + 54, y, 42, 32, actor.maxhp.to_s, 2)
  126.     self.contents.font.italic = false
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● SP の描画
  130.   #     actor : アクター
  131.   #     x     : 描画先 X 座標
  132.   #     y     : 描画先 Y 座標
  133.   #--------------------------------------------------------------------------
  134.   def draw_actor_sp(actor, x, y, size = 16)
  135.     bitmap = RPG::Cache.picture("MP字样")
  136.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  137.     self.contents.blt(x, y + 4, bitmap, src_rect)
  138.     # SP を描画
  139.     x += 32
  140.     self.contents.font.size = size
  141.     self.contents.font.italic = true
  142.     color = actor.sp == 0 ? knockout_color :
  143.       actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  144.     draw_text_custom(x, y, 42, 32, actor.sp.to_s, color, 2)
  145.     self.contents.font.italic = false
  146.     draw_text_normal(x + 42, y, 16, 32, "/", 1)
  147.     self.contents.font.italic = true
  148.     # MaxSP を描画
  149.     draw_text_normal(x + 54, y, 42, 32, actor.maxsp.to_s, 2)
  150.     self.contents.font.italic = false
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ★ 文字列(影つき:通常色・無効色あり)の描画
  154.   #--------------------------------------------------------------------------
  155.   def draw_text_custom(x, y, width, height, str, color, align = 0)
  156.     self.contents.font.color = Color.new(36, 24, 16, 224)
  157.     self.contents.draw_text(x + 1, y + 1, width, height, str, align)
  158.     self.contents.font.color = color
  159.     self.contents.draw_text(x, y, width, height, str, align)
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ★ 文字列(影つき:通常色)の描画
  163.   #--------------------------------------------------------------------------
  164.   def draw_text_normal(x, y, width, height, str, align = 0)
  165.     self.contents.font.color = Color.new(36, 24, 16, 224)
  166.     self.contents.draw_text(x + 1, y + 1, width, height, str, align)
  167.     self.contents.font.color = normal_color
  168.     self.contents.draw_text(x, y, width, height, str, align)
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● フレーム更新
  172.   #--------------------------------------------------------------------------
  173.   def update
  174.     super
  175.     # メインフェーズのときは不透明度をやや下げる
  176.     if $game_temp.battle_main_phase
  177.       self.contents_opacity -= 4 if self.contents_opacity > 192
  178.       self.z = 50
  179.     else
  180.       self.contents_opacity += 4 if self.contents_opacity < 255
  181.       self.z = 200
  182.     end
  183.   end
  184. end
复制代码
帮忙整合掉血掉蓝从右到左 谢谢

未命名.jpg (28.69 KB, 下载次数: 4)

未命名.jpg

作者: cinderelmini    时间: 2013-5-11 18:15
本帖最后由 cinderelmini 于 2013-5-11 18:36 编辑

RUBY 代码复制
  1. def draw_actor_hpbar(actor, x, y)
  2.     bitmap = RPG::Cache.picture("空槽")
  3.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  4.     self.contents.blt(x, y, bitmap, src_rect)
  5.     bitmap = RPG::Cache.picture("血槽")
  6.     cx = actor.hp * 100 / actor.maxhp
  7.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  8.     self.contents.blt(x + 103 - cx, y + 2, bitmap, src_rect)
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ★ SPバー の描画
  12.   #     actor : アクター
  13.   #     x     : 描画先 X 座標
  14.   #     y     : 描画先 Y 座標
  15.   #--------------------------------------------------------------------------
  16.   def draw_actor_spbar(actor, x, y)
  17.     bitmap = RPG::Cache.picture("空槽")
  18.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  19.     self.contents.blt(x, y, bitmap, src_rect)
  20.     bitmap = RPG::Cache.picture("气槽")
  21.     cx = actor.sp * 100 / actor.maxsp
  22.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  23.     self.contents.blt(x + 103 - cx, y + 2, bitmap, src_rect)
  24.   end


用到的是这两段~
可以替换~也可以把原来的函数名字稍微改一下~然后再ctrl+V在下面~

总之~就是下面这样写~

RUBY 代码复制
  1. def draw_actor_hpbar(actor, x, y)
  2.     bitmap = RPG::Cache.picture("空槽")
  3.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  4.     self.contents.blt(x, y, bitmap, src_rect)
  5.     bitmap = RPG::Cache.picture("血槽")
  6.     #cx = actor.hp * 100 / actor.maxhp
  7.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  8.     #self.contents.blt(x + 103 - cx + ax, y + 2, bitmap, src_rect)
  9. ax = 血槽图片跟空槽图片的差距离
  10. self.contents.blt(x + ax, y + 2, bitmap, src_rect)
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ★ SPバー の描画
  14.   #     actor : アクター
  15.   #     x     : 描画先 X 座標
  16.   #     y     : 描画先 Y 座標
  17.   #--------------------------------------------------------------------------
  18.   def draw_actor_spbar(actor, x, y)
  19.     bitmap = RPG::Cache.picture("空槽")
  20.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  21.     self.contents.blt(x, y, bitmap, src_rect)
  22.     bitmap = RPG::Cache.picture("气槽")
  23.     #cx = actor.sp * 100 / actor.maxsp
  24.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  25.     #self.contents.blt(x + 103 - cx + ax, y + 2, bitmap, src_rect)
  26. ax = 气槽图片跟空槽图片的差距离
  27. self.contents.blt(x + ax, y + 2, bitmap, src_rect)
  28.   end


大体上是这样了~
ax就填上槽图片跟空槽图片的宽度差~
理论上是(空槽图片的宽-槽图片的宽)/2
不过这只是一般对称的槽图片公式~
详细的LZ自己填上就是~
作者: fm303018    时间: 2013-5-12 00:09
本帖最后由 fm303018 于 2013-5-12 00:40 编辑

cinderelmini
cx 和 ax 效果一样
src_rect = Rect.new(0, 0, cx, bitmap.height)    #CX报错
ax = 血槽图片跟空槽图片的差距离  #不会用


def draw_actor_hpbar(actor, x, y)
    bitmap = RPG::Cache.picture("BarBack")
    src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    self.contents.blt(x, y, bitmap, src_rect)
    bitmap = RPG::Cache.picture("HPBar01")
    cx = actor.hp * 100 / actor.maxhp
    src_rect = Rect.new(0, 0, cx , bitmap.height)
    self.contents.blt(x -103 + cx, y +0 , bitmap, src_rect)
  end

注意我这里动过了x -103 + cx血槽从右到左正确      但是~被击中~血槽错位
作者: cinderelmini    时间: 2013-5-12 18:43
fm303018 发表于 2013-5-12 00:09
cinderelmini
cx 和 ax 效果一样
src_rect = Rect.new(0, 0, cx, bitmap.height)    #CX报错

好吧……之前哀家各种脑残了……
于是修改一下……
RUBY 代码复制
  1. def draw_actor_hpbar(actor, x, y)
  2.     bitmap = RPG::Cache.picture("空槽")
  3.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  4.     self.contents.blt(x, y, bitmap, src_rect)
  5.     bitmap = RPG::Cache.picture("血槽")
  6.     cx = actor.hp * 100 / actor.maxhp
  7.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  8.     #self.contents.blt(x + 103 - cx + ax, y + 2, bitmap, src_rect)
  9. ax = 血槽图片跟空槽图片的差距离
  10. self.contents.blt(x + ax, y + 2, bitmap, src_rect)
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ★ SPバー の描画
  14.   #     actor : アクター
  15.   #     x     : 描画先 X 座標
  16.   #     y     : 描画先 Y 座標
  17.   #--------------------------------------------------------------------------
  18.   def draw_actor_spbar(actor, x, y)
  19.     bitmap = RPG::Cache.picture("空槽")
  20.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  21.     self.contents.blt(x, y, bitmap, src_rect)
  22.     bitmap = RPG::Cache.picture("气槽")
  23.     cx = actor.sp * 100 / actor.maxsp
  24.     src_rect = Rect.new(0, 0, cx, bitmap.height)
  25.     #self.contents.blt(x + 103 - cx + ax, y + 2, bitmap, src_rect)
  26. ax = 气槽图片跟空槽图片的差距离
  27. self.contents.blt(x + ax, y + 2, bitmap, src_rect)
  28.   end


也就是说cx别#掉就是了~
那会儿忘了cx还是计算槽的长度的OTZ……

然后就是那个ax的值~
你可以随便填个10以下的数字上去~不过目测应该是2~
道理是……
你看空槽外边不是有一层边框吗~
然后血槽或者气槽就没有边框了~
所以血槽和气槽的x和y坐标就必须必空槽的坐标多那么一点~
这样才能对准到空槽的边框内~

以上~




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