#============================================================================== # ■ Sprite_BattleArrow #============================================================================== class Sprite_BattleArrow < Sprite #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_reader :index attr_accessor :select_all attr_accessor :can_select_all attr_accessor :members attr_accessor :add_x attr_accessor :on_ok_method attr_accessor :on_cancel_method #-------------------------------------------------------------------------- # ● 初始化对像 #-------------------------------------------------------------------------- def initialize(type, viewport, can_select_all = false) super(viewport) self.bitmap = Cache.system("BattleArrow") @type = type case @type when :enemy self.ox = 0 src_rect.set(32, 30-35, 32, 32+50) @members = $game_troop.members @add_x = 30-10 when :actor self.ox = 32 src_rect.set(0, 20-35, 32, 32+50) @members = $game_party.battle_members @add_x = -30 else self.ox = 16 src_rect.set(0, 0, 32, 32) @members = [] @add_x = 0 end self.oy = 32 self.z = 2500 self.visible = false @index = 0 @old_index = @index @select_all = false @can_select_all = can_select_all update end #-------------------------------------------------------------------------- # ● 设置 #-------------------------------------------------------------------------- def setup(can_select_all) @can_select_all = can_select_all @select_all = false @index = @old_index case @type when :actor @members = $game_party.battle_members when :enemy @members = $game_troop.members else @members = [] end self.visible = true update end #-------------------------------------------------------------------------- # ● 获取光标指向的战斗者 #-------------------------------------------------------------------------- def battler return members[index] end #-------------------------------------------------------------------------- # ● 设置光标位置 #-------------------------------------------------------------------------- def index=(index) @index = index update end #-------------------------------------------------------------------------- # ● 刷新画面 #-------------------------------------------------------------------------- def update super return unless visible if Input.trigger?(13) Sound.play_ok on_ok_method.call if on_ok_method return end if Input.trigger?(12) Sound.play_cancel on_cancel_method.call if on_cancel_method return end if Input.trigger?(4) or Input.trigger?(6) if @select_all @select_all = false @index = @old_index else if @can_select_all @select_all = true @old_index = @index end end end case @type when :actor update_actor when :enemy update_enemy end end #-------------------------------------------------------------------------- # ● 刷新选择角色 #-------------------------------------------------------------------------- def update_actor if @select_all @index += 1 @index %= members.size else old_index = @index for i in 0..members.size @index = i if @index == members.size @index = old_index break end next unless battler self_x = battler.fscreen_x + add_x self_y = battler.fscreen_y end if Input.repeat?(2) Sound.play_cursor @index += 1 @index %= members.size end if Input.repeat?(8) Sound.play_cursor @index += members.size - 1 @index %= members.size end end if battler self.x = battler.fscreen_x + add_x self.y = battler.fscreen_y end end #-------------------------------------------------------------------------- # ● 刷新选择敌人 #-------------------------------------------------------------------------- def update_enemy if @select_all members.size.times do @index += 1 @index %= members.size break if not battler.hidden? end else members.size.times do break if not battler.hidden? @index += 1 @index %= members.size end old_index = @index for i in 0..members.size @index = i if @index == members.size @index = old_index break end next if battler.hidden? self_x = battler.screen_x + add_x self_y = battler.screen_y end if Input.repeat?(2) Sound.play_cursor members.size.times do @index += 1 @index %= members.size break if not battler.hidden? end end if Input.repeat?(8) Sound.play_cursor members.size.times do @index += members.size - 1 @index %= members.size break if not battler.hidden? end end end if battler != nil self.x = battler.screen_x + add_x self.y = battler.screen_y end end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 结束处理 #-------------------------------------------------------------------------- alias hzhj_terminate_battle_arrow terminate def terminate @actor_arrow.dispose @enemy_arrow.dispose hzhj_terminate_battle_arrow end #-------------------------------------------------------------------------- # ● 刷新所有窗口 #-------------------------------------------------------------------------- alias hzhj_update_all_windows_battle_arrow update_all_windows def update_all_windows hzhj_update_all_windows_battle_arrow @actor_arrow.update @enemy_arrow.update end #-------------------------------------------------------------------------- # ● 生成角色窗口 #-------------------------------------------------------------------------- def create_actor_window viewport = @viewport #@spriteset.viewport1 @actor_arrow = Sprite_BattleArrow.new(:actor, viewport, false) @actor_arrow.on_ok_method = method(:on_actor_ok) @actor_arrow.on_cancel_method = method(:on_actor_cancel) end #-------------------------------------------------------------------------- # ● 生成敌人窗口 #-------------------------------------------------------------------------- def create_enemy_window viewport = @viewport #@spriteset.viewport1 @enemy_arrow = Sprite_BattleArrow.new(:enemy, viewport, false) @enemy_arrow.on_ok_method = method(:on_enemy_ok) @enemy_arrow.on_cancel_method = method(:on_enemy_cancel) end #-------------------------------------------------------------------------- # ● 开始选择队友 #-------------------------------------------------------------------------- def select_actor_selection(can_select_all = false) @actor_arrow.setup(can_select_all) @skill_window.hide @item_window.hide end #-------------------------------------------------------------------------- # ● 角色“确定” #-------------------------------------------------------------------------- def on_actor_ok target_index = @actor_arrow.select_all ? 65535 : @actor_arrow.index BattleManager.actor.input.target_index = target_index @skill_window.hide @item_window.hide @actor_arrow.visible = false next_command end #-------------------------------------------------------------------------- # ● 角色“取消” #-------------------------------------------------------------------------- def on_actor_cancel case @actor_command_window.current_symbol when :skill @skill_window.show.activate when :item @item_window.show.activate end @actor_arrow.visible = false end #-------------------------------------------------------------------------- # ● 开始选择敌人 #-------------------------------------------------------------------------- def select_enemy_selection(can_select_all = false) @enemy_arrow.setup(can_select_all) # @actor_command_window.hide @skill_window.hide @item_window.hide end #-------------------------------------------------------------------------- # ● 敌人“确定” #-------------------------------------------------------------------------- def on_enemy_ok target_index = @enemy_arrow.select_all ? 65535 : @enemy_arrow.index BattleManager.actor.input.target_index = target_index @skill_window.hide @item_window.hide @enemy_arrow.visible = false next_command end #-------------------------------------------------------------------------- # ● 敌人“取消” #-------------------------------------------------------------------------- def on_enemy_cancel case @actor_command_window.current_symbol when :attack @actor_command_window.show.activate when :skill @skill_window.show.activate when :status @actor_command_window.show.activate when :item @item_window.show.activate end @enemy_arrow.visible = false end end class Game_Actor < Game_Battler attr_accessor :fscreen_x attr_accessor :fscreen_y def initialize(actor_id) super() setup(actor_id) @last_skill = Game_BaseItem.new @fscreen_x = 0 @fscreen_y = 0 end end class Game_Party < Game_Unit def setup_battle_test_members $data_system.test_battlers.each do |battler| actor = $game_actors[battler.actor_id] actor.change_level(battler.level, false) actor.init_equips(battler.equips) actor.recover_all actor.fscreen_x = 100 actor.fscreen_y = 276+battler.actor_id*24 p battler.actor_id add_actor(actor.id) end end end class Sprite_BattleArrow < Sprite def update_enemy if @select_all members.size.times do @index += 1 @index %= members.size break if not battler.hidden? || battler.dead? end else members.size.times do break if not battler.hidden? || battler.dead? @index += 1 @index %= members.size end old_index = @index for i in 0..members.size @index = i if @index == members.size @index = old_index break end next if battler.hidden? || battler.dead? self_x = battler.screen_x + add_x self_y = battler.screen_y end if Input.repeat?(2) Sound.play_cursor members.size.times do @index += 1 @index %= members.size break if not battler.hidden? || battler.dead? end end if Input.repeat?(8) Sound.play_cursor members.size.times do @index += members.size - 1 @index %= members.size break if not battler.hidden? || battler.dead? end end end if battler != nil self.x = battler.screen_x + add_x self.y = battler.screen_y end end end
指针1.jpg (42.97 KB, 下载次数: 16)
指针2.jpg (42.88 KB, 下载次数: 18)
BattleArrow.png (3.91 KB, 下载次数: 22)
class Window_AEName < Window_Base def initialize(actor) super(0,0,100,100) self.opacity = 0 refresh(actor) end def refresh(actor) contents.clear draw_actor_name(actor, 0, 0) end end class Sprite_BattleArrow < Sprite def update_actor if @select_all @index += 1 @index %= members.size else old_index = @index for i in 0..members.size @index = i if @index == members.size @index = old_index break end next unless battler self_x = battler.fscreen_x + add_x self_y = battler.fscreen_y end if Input.repeat?(2) Sound.play_cursor @index += 1 @index %= members.size end if Input.repeat?(8) Sound.play_cursor @index += members.size - 1 @index %= members.size end end if battler self.x = battler.fscreen_x + add_x self.y = battler.fscreen_y [url=home.php?mod=space&uid=133944]@w[/url] = Window_AEName.new(battler) @w.show @w.x = battler.fscreen_x + add_x @w.y = battler.fscreen_y end end def update_enemy if @select_all members.size.times do @index += 1 @index %= members.size break if not battler.hidden? end else members.size.times do break if not battler.hidden? @index += 1 @index %= members.size end old_index = @index for i in 0..members.size @index = i if @index == members.size @index = old_index break end next if battler.hidden? self_x = battler.screen_x + add_x self_y = battler.screen_y end if Input.repeat?(2) Sound.play_cursor members.size.times do @index += 1 @index %= members.size break if not battler.hidden? end end if Input.repeat?(8) Sound.play_cursor members.size.times do @index += members.size - 1 @index %= members.size break if not battler.hidden? end end end if battler != nil self.x = battler.screen_x + add_x self.y = battler.screen_y @w = Window_AEName.new(battler) @w.show @w.x = battler.screen_x + add_x @w.y = battler.screen_y end end end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |