#============================================================================== # ★ RGSS3-Extension # LNX11b_リフォーム・バトルステータス # Spriteでパラメータやゲージを実装した動的なバトルステータスです。 # 画像や設定を変更することでデザインをアレンジすることが可能です。 # # * このスクリプトは LNX11a_XPスタイルバトル の機能拡張スクリプトです。 # LNX11a_XPスタイルバトル より下のセクションに導入してください。 # # また、ステータスの各要素の配置設定を行う # LNX11bskin_リフォーム・バトルステータス#スキン設定 も必ず導入してください。 # # version : 1.01 (12/03/13) # author : ももまる # reference : http://peachround.blog.fc2.com/blog-entry-12.html # #============================================================================== #============================================================================== # ■ LNXスクリプト導入情報 #============================================================================== $lnx_include = {} if $lnx_include == nil $lnx_include[:lnx11b] = 101 # version module LNX11b ; end unless $lnx_include[:lnx11a] p "NG:LNX11b_リフォーム・バトルステータス" text = "LNX11b: Error! LNX11a より下位のセクションに配置してください。" p text msgbox text exit end p "OK:LNX11b_リフォーム・バトルステータス" #============================================================================== # ■ Window_BattleStatus #------------------------------------------------------------------------------ # バトル画面で、パーティメンバーのステータスを表示するウィンドウです。 #============================================================================== class Window_BattleStatus < Window_Selectable #-------------------------------------------------------------------------- # ● [エイリアス]:オブジェクト初期化 #-------------------------------------------------------------------------- alias :lnx11b_initialize :initialize def initialize unless $lnx_include[:lnx11bskin] text = "LNX11b:Error! LNX11bskin が導入されていません。" p text msgbox text exit end @sprite_viewport = Viewport.new # 元のメソッドを呼ぶ lnx11b_initialize @sprite_viewport.z = self.z end #-------------------------------------------------------------------------- # ● [オーバーライド]解放 #-------------------------------------------------------------------------- def dispose @sprite_viewport.dispose dispose_status_sprites super end #-------------------------------------------------------------------------- # ● [オーバーライド]:表示行数の取得 #-------------------------------------------------------------------------- def visible_line_number return 4 end #-------------------------------------------------------------------------- # ● [オーバーライド]:行の高さを取得 #-------------------------------------------------------------------------- def line_height return 24 # ステートアイコン描画領域を確保 end #-------------------------------------------------------------------------- # ● [オーバーライド]:フレーム更新 #-------------------------------------------------------------------------- def update super update_invisible update_status_sprites end #-------------------------------------------------------------------------- # ● [再定義]:表示状態更新 #-------------------------------------------------------------------------- def update_invisible @sprite_viewport.visible = !$game_party.status_invisible end #-------------------------------------------------------------------------- # ● [再定義]:リフレッシュ #-------------------------------------------------------------------------- def refresh set_xy # ステータススプライトの作成 create_status_sprites draw_all_items end #-------------------------------------------------------------------------- # ● [追加]:ステータススプライトの作成 #-------------------------------------------------------------------------- def create_status_sprites return if @sprite != nil @sprite = [] $game_party.battle_members.each_with_index do |actor, i| @sprite[i] = Spriteset_BattleStatus.new(actor, self, @sprite_viewport) end end #-------------------------------------------------------------------------- # ● [追加]:ステータススプライトの解放 #-------------------------------------------------------------------------- def dispose_status_sprites return unless @sprite @sprite.each do |sprite| sprite.dispose end @sprite = nil end #-------------------------------------------------------------------------- # ● [追加]:ステータススプライトの更新 #-------------------------------------------------------------------------- def update_status_sprites return unless @sprite @sprite.each {|sprite| sprite.update} end #-------------------------------------------------------------------------- # ● [再定義]:基本エリアの描画 #-------------------------------------------------------------------------- def draw_basic_area(rect, actor) # スプライトの更新 @sprite[actor.index].refresh end #-------------------------------------------------------------------------- # ● [再定義]:ゲージエリアの描画 #-------------------------------------------------------------------------- def draw_gauge_area(*args) # 何もしない end #-------------------------------------------------------------------------- # ● [エイリアス]:内容の消去 #-------------------------------------------------------------------------- alias :lnx11b_all_clear :all_clear def all_clear # 元のメソッドを呼ぶ lnx11b_all_clear # ステータススプライトの解放 dispose_status_sprites end end #============================================================================== # ■ [追加]:Spriteset_BattleStatus #------------------------------------------------------------------------------ # スプライトによるバトルステータス。 #============================================================================== class Spriteset_BattleStatus include LNX11 include LNX11b #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(battler, status_window, viewport = nil) @battler = battler @viewport = viewport @status_window = status_window # 基準座標 @x = $game_party.members_screen_x[battler.index] + STATUS_OFFSET[:x] @x -= STATUS_WIDTH / 2 @y = @status_window.y + STATUS_OFFSET[:y] # メインスキン @main_skin_sprite = create_skin(MAIN_SKIN) # ステート @state_skin_sprite = create_skin(STATE_SKIN) @state_icon = create_state_icon(STATE_ICON) # 名前 @name_sprite = create_name(NAME) # 数字 num = @battler.hp ; max = @battler.mhp @hp_number_sprite = create_number(num, max, HP_NUMBER_FORMAT) num = @battler.mp ; max = @battler.mmp @mp_number_sprite = create_number(num, max, MP_NUMBER_FORMAT) if $data_system.opt_display_tp num = @battler.tp ; max = @battler.max_tp @tp_number_sprite = create_number(num, max, TP_NUMBER_FORMAT) end # 数字(最大値) num = @battler.mhp @mhp_number_sprite = create_number(num, num, MAXHP_NUMBER_FORMAT) num = @battler.mmp @mmp_number_sprite = create_number(num, num, MAXMP_NUMBER_FORMAT) if $data_system.opt_display_tp num = @battler.max_tp @mtp_number_sprite = create_number(num, num, MAXTP_NUMBER_FORMAT) end # ゲージ @hp_gauge_sprite = create_gauge(@battler.hp_rate, HP_GAUGE_FORMAT) @mp_gauge_sprite = create_gauge(@battler.mp_rate, MP_GAUGE_FORMAT) if $data_system.opt_display_tp @tp_gauge_sprite = create_gauge(@battler.tp_rate, TP_GAUGE_FORMAT) end # ゲージと数字スプライトの同期 if HP_GAUGE_FORMAT[:number_link] && @hp_number_sprite @hp_gauge_sprite.number = @hp_number_sprite if @hp_gauge_sprite end if MP_GAUGE_FORMAT[:number_link] && @mp_number_sprite @mp_gauge_sprite.number = @mp_number_sprite if @mp_gauge_sprite end if TP_GAUGE_FORMAT[:number_link] && @tp_number_sprite @tp_gauge_sprite.number = @tp_number_sprite if @tp_gauge_sprite end # 更新するスプライトの配列 @sprites = [@main_skin_sprite, @state_skin_sprite, @state_icon, @name_sprite, @hp_number_sprite, @mp_number_sprite, @tp_number_sprite, @mhp_number_sprite, @mmp_number_sprite, @mtp_number_sprite, @hp_gauge_sprite, @mp_gauge_sprite, @tp_gauge_sprite] @sprites.delete(nil) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose @sprites.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update @sprites.each {|sprite| sprite.update } end #-------------------------------------------------------------------------- # ● スプライトの位置設定 #-------------------------------------------------------------------------- def move(sprite, format) # 表示基準 X 座標 x = format[:x_fixed] ? @x : @x - @status_window.min_offset sprite.move(x + format[:x], @y + format[:y], format[:z]) end #-------------------------------------------------------------------------- # ● スキンの作成 #-------------------------------------------------------------------------- def create_skin(format) return nil unless format[:enabled] sprite = Sprite_Skin.new(format, @viewport) move(sprite, format) return sprite end #-------------------------------------------------------------------------- # ● 名前の作成 #-------------------------------------------------------------------------- def create_name(format) return nil unless format[:enabled] sprite = Sprite_BattlerName.new(@battler, format, @viewport) move(sprite, format) return sprite end #-------------------------------------------------------------------------- # ● 数字の作成 #-------------------------------------------------------------------------- def create_number(num, max, format) return nil unless format[:enabled] sprite = Sprite_Number.new(num, max, format, @viewport) move(sprite, format) return sprite end #-------------------------------------------------------------------------- # ● ゲージの作成 #-------------------------------------------------------------------------- def create_gauge(rate, format) return nil unless format[:enabled] case format[:type] when 0 # 横ゲージ sprite = Sprite_HorzGauge.new(rate, format, @viewport) when 1 # セルゲージ sprite = Sprite_CellGauge.new(rate, format, @viewport) end move(sprite, format) return sprite end #-------------------------------------------------------------------------- # ● ステートアイコンの作成 #-------------------------------------------------------------------------- def create_state_icon(format) return nil unless format[:enabled] sprite = Sprite_StateIcon.new(@battler, @status_window, format, @viewport) move(sprite, format) return sprite end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh # ゲージ @hp_gauge_sprite.set(@battler.hp_rate) if @hp_gauge_sprite @mp_gauge_sprite.set(@battler.mp_rate) if @mp_gauge_sprite @tp_gauge_sprite.set(@battler.tp_rate) if @tp_gauge_sprite # 数字 @hp_number_sprite.set(@battler.hp, @battler.mhp) if @hp_number_sprite @mp_number_sprite.set(@battler.mp, @battler.mmp) if @mp_number_sprite @tp_number_sprite.set(@battler.tp, @battler.max_tp) if @tp_number_sprite # 数字(最大値) @mhp_number_sprite.set(@battler.mhp, @battler.mhp) if @mhp_number_sprite @mmp_number_sprite.set(@battler.mmp, @battler.mmp) if @mmp_number_sprite mtp = @battler.max_tp @mtp_number_sprite.set(mtp, mtp) if @mtp_number_sprite # ステート @state_icon.refresh if @state_icon @state_skin_sprite.visible = @state_icon.visible if @state_skin_sprite # 名前 if @name_sprite @name_sprite.refresh if @state_icon && NAME[:auto_hide] @name_sprite.visible = !@state_icon.visible end end end end module LNX11 # X 座標の自動調整を行う STATUS_AUTOADJUST = true end #============================================================================== # ■ [追加]:Sprite_BattleStatus #------------------------------------------------------------------------------ # バトルステータスのスプライト群のスーパークラス。 #============================================================================== class Sprite_BattleStatus < Sprite #-------------------------------------------------------------------------- # ● 移動 #-------------------------------------------------------------------------- def move(x, y, z) self.x = x self.y = y self.z = z end end #============================================================================== # ■ [追加]:Sprite_Skin #------------------------------------------------------------------------------ # バトルステータス:スキンのスプライト。 #============================================================================== class Sprite_Skin < Sprite_BattleStatus #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(format, viewport = nil) super(viewport) self.bitmap = Cache.system(format[:bitmap]) end end #============================================================================== # ■ [追加]:Sprite_BattlerName #------------------------------------------------------------------------------ # バトルステータス:名前を表示するスプライト。 #============================================================================== class Sprite_BattlerName < Sprite_BattleStatus #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(battler, format, viewport = nil) super(viewport) @battler = battler @format = format @name = "" refresh end #-------------------------------------------------------------------------- # ● ビットマップの解放 #-------------------------------------------------------------------------- def bitmap_dispose self.bitmap.dispose if self.bitmap && !self.bitmap.disposed? self.bitmap = nil end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh return if @name == @battler.name @name = @battler.name bitmap_dispose if @format[:bitmap_name] self.bitmap = Cache.system("name_#{@name}") else self.bitmap = Bitmap.new(@format[:width], @format[:height]) self.bitmap.font.name = @format[:name] self.bitmap.font.size = @format[:size] self.bitmap.font.bold = @format[:bold] self.bitmap.font.italic = @format[:italic] self.bitmap.font.color = @format[:color][0] self.bitmap.font.out_color = @format[:color][1] self.bitmap.draw_text(self.bitmap.rect, @name, @format[:align]) end end end #============================================================================== # ■ [追加]:Sprite_HorzGauge #------------------------------------------------------------------------------ # バトルステータス:横方向のゲージ。 #============================================================================== class Sprite_HorzGauge < Sprite_BattleStatus NUMBERS = [0,1,2,3,4,5,6,7,8,9] COLOR_SIZE = 4 # 0:通常 1:ピンチ 2:最大 3:サブゲージ #-------------------------------------------------------------------------- # ● [追加]:公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :number # 同期する数字スプライト #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(rate, format, viewport) super(viewport) self.bitmap = Cache.system(format[:bitmap]) @speed = format[:speed] @s_speed = format[:s_speed] @crisis = format[:crisis] @sub_gauge = Sprite.new(viewport) @sub_gauge.bitmap = self.bitmap @number = nil color_set_rect(3, @sub_gauge) set(rate, true) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose @sub_gauge.dispose super end #-------------------------------------------------------------------------- # ● 移動 #-------------------------------------------------------------------------- def move(x, y, z) super(x, y, z) @sub_gauge.x = x @sub_gauge.y = y @sub_gauge.z = z - 1 end #-------------------------------------------------------------------------- # ● ゲージ最大か? #-------------------------------------------------------------------------- def max? @gauge_width / max_gauge_widht >= 1.0 end #-------------------------------------------------------------------------- # ● ゲージが少ない? #-------------------------------------------------------------------------- def crisis? @gauge_width / max_gauge_widht < @crisis end #-------------------------------------------------------------------------- # ● 最大ゲージ幅の取得 #-------------------------------------------------------------------------- def max_gauge_widht self.bitmap.width.to_f end #-------------------------------------------------------------------------- # ● ゲージ色変更(Rect) #-------------------------------------------------------------------------- def color_set_rect(color, sprite) sprite.src_rect.height = self.bitmap.height / COLOR_SIZE sprite.src_rect.y = color * self.bitmap.height / COLOR_SIZE end #-------------------------------------------------------------------------- # ● ゲージ色変更 #-------------------------------------------------------------------------- def gauge_color_set color_set_rect(max? ? 2 : crisis? ? 1 : 0, self) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # メインゲージ幅の更新 if @real_gauge_width != @gauge_width if @number # 数字スプライトと同期 rate = @number.real_rate width = ([max_gauge_widht * rate, rate != 0 ? 1 : 0].max).to_i @real_gauge_width = width else @real_gauge_width = sma(@gauge_width, @real_gauge_width, @speed) end # ゲージ色変更 gauge_color_set end # サブゲージ幅の更新 if @sub_gauge_width > @gauge_width @sub_gauge_width = [@sub_gauge_width - @s_speed, @gauge_width].max elsif @sub_gauge_width != @gauge_width @sub_gauge_width = @real_gauge_width end # スプライトの更新 update_sprite end #-------------------------------------------------------------------------- # ● スプライトの更新 #-------------------------------------------------------------------------- def update_sprite self.src_rect.width = @real_gauge_width @sub_gauge.x = self.x + @real_gauge_width @sub_gauge.src_rect.x = @real_gauge_width @sub_gauge.src_rect.width = @sub_gauge_width - @real_gauge_width end #-------------------------------------------------------------------------- # ● ゲージレートの設定 #-------------------------------------------------------------------------- def set(rate, apply = false) @gauge_rate = rate @gauge_width = ([max_gauge_widht * rate, rate != 0 ? 1 : 0].max).to_i # すぐに適用 if apply @real_gauge_width = @gauge_width @sub_gauge_width = @gauge_width # ゲージ色変更 gauge_color_set # スプライトの更新 update_sprite end end #-------------------------------------------------------------------------- # ● 移動平均 #-------------------------------------------------------------------------- def sma(a, b, p) # a = 目標位置 b = 現在地 return a if a == b || (a - b).abs < 0.3 || p == 1 result = ((a + b * (p.to_f - 1)) / p.to_f) return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result end end #============================================================================== # ■ [追加]:Sprite_CellGauge #------------------------------------------------------------------------------ # バトルステータス:値に応じたセルを参照して表示する擬似ゲージ。 #============================================================================== class Sprite_CellGauge < Sprite_BattleStatus #-------------------------------------------------------------------------- # ● [追加]:公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :number # 同期する数字スプライト #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(rate, format, viewport) super(viewport) self.bitmap = Cache.system(format[:bitmap]) @speed = format[:speed] @pattern = format[:pattern] @pattern_direction = format[:direction] @cell_width = format[:width] @cell_height = format[:height] # パターン @horz_size = self.bitmap.width / @cell_width @vtcl_size = self.bitmap.height / @cell_height @number = nil set(rate, true) end #-------------------------------------------------------------------------- # ● パターン数の取得 #-------------------------------------------------------------------------- def pattern @pattern == :auto ? @horz_size * @vtcl_size - 1 : @pattern - 1 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # メインゲージ幅の更新 if @real_rate.truncate != @rate.truncate if number # 数字スプライトと同期 @real_rate = @number.real_rate * 100 else @real_rate = sma(@rate, @real_rate, @speed) end # スプライトの更新 update_sprite end end #-------------------------------------------------------------------------- # ● スプライトの更新 #-------------------------------------------------------------------------- def update_sprite pt = (pattern * @real_rate / 100).truncate if @pattern_direction == 0 # 横方向にパターンが並んでいる cx = pt % @horz_size * @cell_width cy = pt / @horz_size * @cell_height else # 縦方向にパターンが並んでいる cx = pt / @vtcl_size * @cell_width cy = pt % @vtcl_size * @cell_height end self.src_rect.set(cx, cy, @cell_width, @cell_height) end #-------------------------------------------------------------------------- # ● ゲージレートの設定 #-------------------------------------------------------------------------- def set(rate, apply = false) @rate = rate * 100 # すぐに適用 if apply @real_rate = @rate # スプライトの更新 update_sprite end end #-------------------------------------------------------------------------- # ● 移動平均 #-------------------------------------------------------------------------- def sma(a, b, p) # a = 目標位置 b = 現在地 return a if a == b || (a - b).abs < 0.3 || p == 1 result = ((a + b * (p.to_f - 1)) / p.to_f) return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result end end #============================================================================== # ■ [追加]:Sprite_Number #------------------------------------------------------------------------------ # バトルステータス:数字を表示するスプライト。 #============================================================================== class Sprite_Number < Sprite_BattleStatus COLOR_SIZE = 3 # 0:通常 # 1:1/4(ピンチ) # 2:死亡 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(num, max, format, viewport = nil) super(viewport) @src_bitmap = Cache.system(format[:bitmap]) @speed = format[:speed] @align = format[:align] @spacing = format[:spacing] @crisis = format[:crisis] @dead = format[:dead] digit = format[:digit] # 数字幅 @num_width = @src_bitmap.width / 10 # 数字高さ @num_height = @src_bitmap.height / COLOR_SIZE bw = @num_width * digit + @spacing * (digit - 1) self.bitmap = Bitmap.new(bw, @num_height) # 文字揃えによる基準座標の変更 case @align when 0 ; self.ox = 0 when 1 ; self.ox = self.width / 2 when 2 ; self.ox = self.width end # 初期値適用 set(num, max, true) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose self.bitmap.dispose super end #-------------------------------------------------------------------------- # ● レートの取得 #-------------------------------------------------------------------------- def rate @num / @max.to_f end #-------------------------------------------------------------------------- # ● 表示レートの取得 #-------------------------------------------------------------------------- def real_rate @real_num / @max.to_f end #-------------------------------------------------------------------------- # ● 数値が少ない? #-------------------------------------------------------------------------- def crisis? rate < @crisis end #-------------------------------------------------------------------------- # ● 数値が 0 か? #-------------------------------------------------------------------------- def dead? rate <= @dead end #-------------------------------------------------------------------------- # ● 数字色取得 #-------------------------------------------------------------------------- def number_color dead? ? 2 : crisis? ? 1 : 0 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # 数値の更新 if @real_num != @num ac = [1, ((@real_num - @num).abs / @speed).truncate].max if @real_num > @num @real_num = [@real_num - ac, @num].max else @real_num = [@real_num + ac, @num].min end # ビットマップの更新 update_bitmap end end #-------------------------------------------------------------------------- # ● 数値の設定 #-------------------------------------------------------------------------- def set(num, max, apply = false) @num = num @max = max # すぐに適用 if apply @real_num = @num # ビットマップの更新 update_bitmap end end #-------------------------------------------------------------------------- # ● ビットマップの更新 #-------------------------------------------------------------------------- def update_bitmap self.bitmap.clear # 数値を文字列の配列にする numbers = (@real_num.to_i.abs.to_s).split(//) # 数字の色 sy = @num_height * number_color # ダメージ値の幅 nw = @num_width * numbers.size + @spacing * (numbers.size - 1) # 描画 X 座標 case @align when 0 ; bx = 0 # 左揃え when 1 ; bx = (self.bitmap.width - nw) / 2 # 中央揃え when 2 ; bx = self.bitmap.width - nw # 右揃え end # 数字を描画 rect = Rect.new(0, sy, @num_width, @num_height) numbers.size.times do |n| rect.x = numbers[n].to_i * @num_width self.bitmap.blt(bx + @num_width * n + @spacing * n, 0, @src_bitmap, rect) end end end #============================================================================== # ■ [追加]:Sprite_StateIcon #------------------------------------------------------------------------------ # バトルステータス:ステートアイコンをスクロール表示するスプライト。 #============================================================================== class Sprite_StateIcon < Sprite_BattleStatus #-------------------------------------------------------------------------- # ● [追加]:公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :min_offset # ステータス描画 X 座標の位置修正 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(battler, bufwindow, format, viewport = nil) super(viewport) @battler = battler @bufwindow = bufwindow @size = format[:size] @background_color = format[:background_color] @scroll_interval = format[:scroll_interval] @icons = [-128] self.visible = false # リフレッシュ refresh end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose bitmap_dispose super end #-------------------------------------------------------------------------- # ● ビットマップの解放 #-------------------------------------------------------------------------- def bitmap_dispose self.visible = false self.bitmap.dispose if self.bitmap && !self.bitmap.disposed? self.bitmap = nil end #-------------------------------------------------------------------------- # ● ステートアイコン配列の取得 #-------------------------------------------------------------------------- def icons @battler.state_icons + @battler.buff_icons end #-------------------------------------------------------------------------- # ● ステートアイコン数の取得 #-------------------------------------------------------------------------- def icons_size @bufwindow.states(@battler, @bufwindow.contents_width) end #-------------------------------------------------------------------------- # ● スクロールのリセット #-------------------------------------------------------------------------- def reset_scroll self.src_rect.x = 0 end #-------------------------------------------------------------------------- # ● スクロールを進める #-------------------------------------------------------------------------- def update_scroll self.src_rect.x += self.src_rect.width reset_scroll if self.src_rect.x >= self.bitmap.width end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update update_scroll if self.bitmap && Graphics.frame_count % @scroll_interval == 0 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh i = icons return if @icons == i @icons = i i_size = icons_size # ビットマップの作成 bitmap_dispose if self.bitmap && !self.bitmap.disposed? return if i_size == 0 self.visible = true self.bitmap = Bitmap.new(i_size * 24, 24) self.src_rect.set(0, 0, @size * 24, 24) # バッファウィンドウにアイコンの描画 @bufwindow.contents.clear @bufwindow.draw_actor_icons(@battler, 0, 0, @bufwindow.contents_width) # 描画したアイコンをビットマップに転送 self.bitmap.fill_rect(self.bitmap.rect, @background_color) self.bitmap.blt(0, 0, @bufwindow.contents, self.bitmap.rect) @bufwindow.contents.clear reset_scroll end end
QQ图片20181121055256.png (6.95 KB, 下载次数: 17)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |