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

Project1

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

[已经解决] 请帮我看下这个脚本,敌人显示状态跟血条

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2014-10-30
帖子
118
跳转到指定楼层
1
发表于 2015-3-8 00:07:38 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 VIPArcher 于 2015-3-8 21:15 编辑

脚本默认是血条显示在头上,状态显示在血条上面。我想移动血条跟状态的位置。请问下怎么修改?位置的代码是一大堆公式,看不懂。。。

RUBY 代码复制
  1. #==============================================================================
  2. #  ■エネミーの状態を表示 for RGSS3 Ver0.80-α
  3. # □作成者 kure
  4. #==============================================================================
  5. $kure_base_script = {} if $kure_base_script == nil
  6. $kure_base_script[:InfoBar] = 100
  7. p "エネミーの情報表示"
  8. module KURE
  9.   module InfoBar
  10.     #初期設定(変更しない事)-----------------------------------------------------
  11.     COLOR = []
  12.  
  13.     #表示色(IDによって割り当てが決まっています。)
  14.       #バーの背景色(ID0)
  15.       COLOR[0] = Color.new(32 ,32, 64, 255)
  16.  
  17.       #HPバーの色(ID1,ID2)
  18.       COLOR[1] = Color.new(224 ,128, 64, 255)
  19.       COLOR[2] = Color.new(240 ,192, 64, 255)
  20.  
  21.   end
  22. end
  23.  
  24. #==============================================================================
  25. # ■ RPG::Enemy(追加定義)
  26. #==============================================================================
  27. class RPG::Enemy < RPG::BaseItem
  28.   #--------------------------------------------------------------------------
  29.   # ☆ バーの表示幅の定義(追加定義)
  30.   #--------------------------------------------------------------------------  
  31.   def infobar_width
  32.     @note.match(/<情報表示幅\s?(\d+)\s?>/)
  33.     return 100 unless $1
  34.     return $1.to_i
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ☆ バーの表示幅の定義(追加定義)
  38.   #--------------------------------------------------------------------------  
  39.   def infobar_visible?
  40.     return false if @note.include?("<情報非表示>")
  41.     return true
  42.   end
  43. end
  44.  
  45. #==============================================================================
  46. # ■ Game_Enemy
  47. #==============================================================================
  48. class Game_Enemy < Game_Battler
  49.   #--------------------------------------------------------------------------
  50.   # ☆ バーの表示幅の定義(追加定義)
  51.   #--------------------------------------------------------------------------  
  52.   def infobar_width
  53.     return enemy.infobar_width
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ☆ バーの表示幅の定義(追加定義)
  57.   #--------------------------------------------------------------------------  
  58.   def infobar_visible?
  59.     return enemy.infobar_visible?
  60.   end
  61. end
  62.  
  63. #==============================================================================
  64. # ■ Spriteset_Battle
  65. #==============================================================================
  66. class Spriteset_Battle
  67.   #--------------------------------------------------------------------------
  68.   # ● 敵キャラスプライトの作成(エイリアス再定義)
  69.   #--------------------------------------------------------------------------
  70.   alias k_basescript_before_create_enemies create_enemies
  71.   def create_enemies
  72.     k_basescript_before_create_enemies
  73.     @enemy_info_bar = $game_troop.members.reverse.collect do |enemy|
  74.       Sprite_Infobar.new(@viewport1, enemy)
  75.     end
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 敵キャラスプライトの更新(エイリアス再定義)
  79.   #--------------------------------------------------------------------------
  80.   alias k_basescript_before_update_enemies update_enemies
  81.   def update_enemies
  82.     k_basescript_before_update_enemies
  83.     @enemy_info_bar.each {|sprite| sprite.update }
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 敵キャラスプライトの解放(エイリアス再定義)
  87.   #--------------------------------------------------------------------------
  88.   alias k_basescript_before_dispose_enemies dispose_enemies
  89.   def dispose_enemies
  90.     k_basescript_before_dispose_enemies
  91.     @enemy_info_bar.each {|sprite| sprite.dispose }
  92.   end
  93. end
  94.  
  95. #==============================================================================
  96. # ■ Sprite_Infobar
  97. #==============================================================================
  98. class Sprite_Infobar < Sprite_Base
  99.   #--------------------------------------------------------------------------
  100.   # ● 公開インスタンス変数
  101.   #--------------------------------------------------------------------------
  102.   attr_accessor :battler
  103.   #--------------------------------------------------------------------------
  104.   # ● オブジェクト初期化
  105.   #--------------------------------------------------------------------------
  106.   def initialize(viewport, battler = nil)
  107.     super(viewport)
  108.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  109.     @fill_w = nil
  110.     @bitmap_data = Cache.battler(battler.battler_name, battler.battler_hue)
  111.     @state = battler.states
  112.     @icon_set = Cache.system("Iconset")
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● フレーム更新
  116.   #--------------------------------------------------------------------------
  117.   def update
  118.     super
  119.     if @battler
  120.       @use_sprite = @battler.use_sprite?
  121.       if @use_sprite
  122.         update_bitmap
  123.         update_origin
  124.         update_position
  125.       end
  126.     else
  127.       self.bitmap = nil
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 解放
  132.   #--------------------------------------------------------------------------
  133.   def dispose
  134.     bitmap.dispose if bitmap
  135.     super
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 転送元ビットマップの更新
  139.   #--------------------------------------------------------------------------
  140.   def update_bitmap
  141.     fill_w = @battler.infobar_width * (@battler.hp.to_f / @battler.mhp)
  142.     state = battler.states
  143.     if @fill_w != fill_w or @state != state
  144.       @fill_w = fill_w
  145.       @state = state
  146.  
  147.       width = @battler.infobar_width + 4
  148.  
  149.       new_bitmap = Bitmap.new(width, 35)
  150.       @state.each_with_index {|state, index|
  151.         next if 24 * (index + 1) > new_bitmap.width
  152.         rect = Rect.new(state.icon_index % 16 * 24, state.icon_index / 16 * 24, 24, 24)
  153.         new_bitmap.blt(24 * index, 0, @icon_set, rect, 255)
  154.       }
  155.       #new_bitmap.fill_rect(0, 25, width, 10, color(0))
  156.       #new_bitmap.gradient_fill_rect(2, 27, fill_w, 6, color(1), color(2))
  157.  
  158.       self.bitmap = new_bitmap
  159.       init_visibility
  160.  
  161.       self.opacity = 0 unless @battler.infobar_visible?
  162.     end
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 可視状態の初期化
  166.   #--------------------------------------------------------------------------
  167.   def init_visibility
  168.     @battler_visible = @battler.alive?
  169.     self.opacity = 0 unless @battler_visible
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 文字色取得
  173.   #--------------------------------------------------------------------------
  174.   def color(num)
  175.     return KURE::InfoBar::COLOR[num]
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 原点の更新
  179.   #--------------------------------------------------------------------------
  180.   def update_origin
  181.     if bitmap
  182.       self.ox = bitmap.width / 2
  183.       self.oy = bitmap.height
  184.     end
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 位置の更新
  188.   #--------------------------------------------------------------------------
  189.   def update_position
  190.     self.x = @battler.screen_x
  191.     self.y = @battler.screen_y - @bitmap_data.height
  192.     self.z = @battler.screen_z + 10
  193.   end
  194. end

Lv1.梦旅人

梦石
0
星屑
50
在线时间
641 小时
注册时间
2015-7-29
帖子
211
5
发表于 2015-9-9 10:26:21 | 只看该作者

按我这样改,你自己对比下,在最后几行修改数字

本帖最后由 黄谊洲 于 2015-9-9 10:47 编辑

#==#==============================================================================
#  ■エネミーの状態を表示 for RGSS3 Ver0.80-α
# □作成者 kure
#==============================================================================
$kure_base_script = {} if $kure_base_script == nil
$kure_base_script[:InfoBar] = 100
p "エネミーの情報表示"
module KURE
  module InfoBar
    #初期設定(変更しない事)-----------------------------------------------------
    COLOR = []
   
    #表示色(IDによって割り当てが決まっています。)
      #バーの背景色(ID0)
      COLOR[0] = Color.new(32 ,32, 64, 255)
      
      #HPバーの色(ID1,ID2)
      COLOR[1] = Color.new(224 ,128, 64, 255)
      COLOR[2] = Color.new(240 ,192, 64, 255)
   
  end
end

#==============================================================================
# ■ RPG::Enemy(追加定義)
#==============================================================================
class RPG::Enemy < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ☆ バーの表示幅の定義(追加定義)
  #--------------------------------------------------------------------------  
  def infobar_width
    @note.match(/<情報表示幅\s?(\d+)\s?>/)
    return 100 unless $1
    return $1.to_i
  end
  #--------------------------------------------------------------------------
  # ☆ バーの表示幅の定義(追加定義)
  #--------------------------------------------------------------------------  
  def infobar_visible?
    return false if @note.include?("<情報非表示>")
    return true
  end
end

#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ☆ バーの表示幅の定義(追加定義)
  #--------------------------------------------------------------------------  
  def infobar_width
    return enemy.infobar_width
  end
  #--------------------------------------------------------------------------
  # ☆ バーの表示幅の定義(追加定義)
  #--------------------------------------------------------------------------  
  def infobar_visible?
    return enemy.infobar_visible?
  end
end

#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● 敵キャラスプライトの作成(エイリアス再定義)
  #--------------------------------------------------------------------------
  alias k_basescript_before_create_enemies create_enemies
  def create_enemies
    k_basescript_before_create_enemies
    @enemy_info_bar = $game_troop.members.reverse.collect do |enemy|
      Sprite_Infobar.new(@viewport1, enemy)
    end
  end
  #--------------------------------------------------------------------------
  # ● 敵キャラスプライトの更新(エイリアス再定義)
  #--------------------------------------------------------------------------
  alias k_basescript_before_update_enemies update_enemies
  def update_enemies
    k_basescript_before_update_enemies
    @enemy_info_bar.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ● 敵キャラスプライトの解放(エイリアス再定義)
  #--------------------------------------------------------------------------
  alias k_basescript_before_dispose_enemies dispose_enemies
  def dispose_enemies
    k_basescript_before_dispose_enemies
    @enemy_info_bar.each {|sprite| sprite.dispose }
  end
end

#==============================================================================
# ■ Sprite_Infobar
#==============================================================================
class Sprite_Infobar < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :battler
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport, battler = nil)
    super(viewport)
    @battler = battler
    @fill_w = nil
    @bitmap_data = Cache.battler(battler.battler_name, battler.battler_hue)
    @state = battler.states
    @icon_set = Cache.system("Iconset")
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    if @battler
      @use_sprite = @battler.use_sprite?
      if @use_sprite
        update_bitmap
        update_origin
        update_position
      end
    else
      self.bitmap = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    bitmap.dispose if bitmap
    super
  end
  #--------------------------------------------------------------------------
  # ● 転送元ビットマップの更新
  #--------------------------------------------------------------------------
  def update_bitmap
    fill_w = @battler.infobar_width * (@battler.hp.to_f / @battler.mhp)
    state = battler.states
    if @fill_w != fill_w or @state != state
      @fill_w = fill_w
      @state = state
      
      width = @battler.infobar_width + 4
      
      new_bitmap = Bitmap.new(width, 35)
      @state.each_with_index {|state, index|
        next if 24 * (index + 1) > new_bitmap.width
        rect = Rect.new(state.icon_index % 16 * 24, state.icon_index / 16 * 24, 24, 24)
        new_bitmap.blt(24 * index, 0, @icon_set, rect, 255)
      }
      #new_bitmap.fill_rect(0, 25, width, 10, color(0))
      #new_bitmap.gradient_fill_rect(2, 27, fill_w, 6, color(1), color(2))
   
      self.bitmap = new_bitmap
      init_visibility
      
      self.opacity = 0 unless @battler.infobar_visible?
    end
  end
  #--------------------------------------------------------------------------
  # ● 可視状態の初期化
  #--------------------------------------------------------------------------
  def init_visibility
    @battler_visible = @battler.alive?
    self.opacity = 0 unless @battler_visible
  end
  #--------------------------------------------------------------------------
  # ● 文字色取得
  #--------------------------------------------------------------------------
  def color(num)
    return KURE::InfoBar::COLOR[num]
  end
  #--------------------------------------------------------------------------
  # ● 原点の更新
  #--------------------------------------------------------------------------
  def update_origin
    if bitmap
      self.ox = bitmap.width / 2
      self.oy = bitmap.height
    end
  end
  #--------------------------------------------------------------------------
  # ● 位置の更新
  #--------------------------------------------------------------------------
  def update_position
    self.x = @battler.screen_x + 30
    self.y = @battler.screen_y - @bitmap_data.height + 25
    self.z = @battler.screen_z + 10
  end
end


另外@bitmap_data.height这行不能删 删掉的话你怪物大小不同的话显示位置也会不对,只能在原基础后面修改数字,当然你原来游戏里面的怪物状态显示要关掉,不要问我在哪儿关,因为我也不知道- -

点评

对了 我参照你的代码,你是屏蔽了血条的 所以在屏蔽血条的情况下我这样改才行,没有屏蔽的情况下未知~  发表于 2015-9-9 10:48
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2014-10-30
帖子
118
4
 楼主| 发表于 2015-3-8 21:19:37 | 只看该作者
本帖最后由 sai1993112 于 2015-3-8 21:55 编辑
taroxd 发表于 2015-3-8 08:22
self.y = @battler.screen_y - @bitmap_data.height # 图片的基础位置在敌人上方[/pre]

# 这段是绘制图片 ...


把self.y = @battler.screen_y - @bitmap_data.height # 后面的bitmap_data.height删掉的话会状态图标挡住血条,然后我想了下,如果把taroxd 大大的血条脚本里的血条高度减掉的话,应该可以实现血条上面带状态。可刚才修改过程中还是出错。请问下血条脚本里的血条高度是哪个? 不是hp_height 吗?
我把状态代码复制到血条脚本下面了。error是好像是没声明对象。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2014-10-30
帖子
118
3
 楼主| 发表于 2015-3-8 21:01:55 | 只看该作者
taroxd 发表于 2015-3-8 08:22
self.y = @battler.screen_y - @bitmap_data.height # 图片的基础位置在敌人上方[/pre]

# 这段是绘制图片 ...

谢谢大大!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-3-8 08:22:43 | 只看该作者
本帖最后由 taroxd 于 2015-3-8 08:25 编辑

RUBY 代码复制
  1. self.y = @battler.screen_y - @bitmap_data.height # 图片的基础位置在敌人上方

RUBY 代码复制
  1. # 这段是绘制图片。如果需要更改状态和血条的相对位置的话,需要在这里更改
  2. # 不知道内容的话,可以对着 F1,然后拿草稿纸演算一下
  3.   def update_bitmap
  4.     fill_w = @battler.infobar_width * (@battler.hp.to_f / @battler.mhp)
  5.     state = battler.states
  6.     if @fill_w != fill_w or @state != state
  7.       @fill_w = fill_w
  8.       @state = state
  9.  
  10.       width = @battler.infobar_width + 4
  11.  
  12.       new_bitmap = Bitmap.new(width, 35)
  13.       @state.each_with_index {|state, index|
  14.         next if 24 * (index + 1) > new_bitmap.width
  15.         rect = Rect.new(state.icon_index % 16 * 24, state.icon_index / 16 * 24, 24, 24)
  16.         new_bitmap.blt(24 * index, 0, @icon_set, rect, 255)
  17.       }
  18.       #new_bitmap.fill_rect(0, 25, width, 10, color(0))
  19.       #new_bitmap.gradient_fill_rect(2, 27, fill_w, 6, color(1), color(2))
  20.  
  21.       self.bitmap = new_bitmap
  22.       init_visibility
  23.  
  24.       self.opacity = 0 unless @battler.infobar_visible?
  25.     end
  26.   end

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 22:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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