查看: 1916|回复: 4

[已经解决] 请教一下关于这个脚本-敌人显示状态

[复制链接]
梦石
0
星屑
50
在线时间
50 小时
注册时间
2014-10-30
回帖
88
发表于 2015-4-15 20:06:03 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 VIPArcher 于 2015-4-15 23:35 编辑

发现这个脚本状态只能显示4个,4个以上显示不了,求告诉修改哪里的话可以修改个数呢?

[pre lang="ruby"]#==============================================================================
#  ■エネミーの状態を表示 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 + 20
    self.y = @battler.screen_y - 10
    self.z = @battler.screen_z + 10
  end
end [/pre]
以后发脚本请用代码框<>——VIPArcher留
梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
回帖
1633
发表于 2015-4-15 22:44:17 | 显示全部楼层
状态显示数量取决于其所依附的精灵显示尺寸,显示尺寸又依附于bitmap的真实宽度
虽然不知道激活方式到底是什么,改掉这个就好:
[pre lang="ruby"]  #--------------------------------------------------------------------------
  # ☆ バーの表示幅の定義(追加定義)
  #--------------------------------------------------------------------------  
  def infobar_width
    @note.match(/<情報表示幅\s?(\d+)\s?>/)
    return 100 unless $1
    return $1.to_i
  end[/pre]
100改成200或者更高,但不保证会不会因此而引发显示重叠等问题

点评

PS:100是4个,所以每往上提升一个格数就需要加25,这是我个人的测试结果,另外这脚本很奇怪,800*600完全无效,默认分辨率才能用- -  发表于 2015-4-15 22:47

评分

参与人数 1星屑 +200 收起 理由
VIPArcher + 200 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2015-4-15 23:09:37 | 显示全部楼层
我也再用这个脚本,感觉血条长度超过100很别扭,对不齐敌人的图片,如果是少量BOSS级的怪物这么设定还不错,但敌人一多就特别混乱,而且说实话,就算给我8个状态容量我也感觉不够看,我用的是Ver0.90-α版本
我的对应方法是用了Claimh的战斗系统脚本,里面的选择目标的时候会出现轮盘式状态显示,多的状态都可以在那里看到,不过要等就是了,另外战斗界面本身也没开启排列显示状态,但是由于不会换行,而且是无限制的排列下去,所以状态一多就突破天际。
其实用YEA的战斗系统脚本在各方面的显示最好,状态什么的选定敌人的时候会弹出窗口有多少看到多少而且一点都不混乱,可惜兼容性太差和其他脚本冲突太多我用不了。

对了,说了这么多其实这些和你的问题没有任何关系,不过是我自然自语罢了。解决方法2楼已经说了,如果你只想要个别敌人的血条更长、能容纳状态更多的话再敌人哪里备注 <情報表示幅 200> 200这个数字可以随便改
回复

使用道具 举报

梦石
0
星屑
50
在线时间
50 小时
注册时间
2014-10-30
回帖
88
 楼主| 发表于 2015-4-16 00:20:20 | 显示全部楼层
jianyulei 发表于 2015-4-15 23:09
我也再用这个脚本,感觉血条长度超过100很别扭,对不齐敌人的图片,如果是少量BOSS级的怪物这么设定还不错 ...

好吧,谢谢你回复~
回复

使用道具 举报

梦石
0
星屑
50
在线时间
50 小时
注册时间
2014-10-30
回帖
88
 楼主| 发表于 2015-4-16 00:20:49 | 显示全部楼层
判约之轮 发表于 2015-4-15 22:44
状态显示数量取决于其所依附的精灵显示尺寸,显示尺寸又依附于bitmap的真实宽度
虽然不知道激活方式到底是 ...

谢谢前辈!!问题解决了~!
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部