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

Project1

 找回密码
 注册会员
搜索

[脚本]敌人选择框替换成“移动光标”

查看数: 36 | 评论数: 1 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-10-19 22:16

正文摘要:

RUBY 代码复制class Scene_Battle < Scene_Base  #--------------------------------------------------------------------------  # * 开始目标敌人选择 - 创建选择敌 ...

回复

swbsl 发表于 前天 16:27
修改功能:让“移动光标”窗口内显示敌人的状态图标。(状态显示最大数量:两排4个)

  1. class Window_TargetEnemy < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # * 初始化 敌人选择光标窗口
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0, 80, 80)
  7.     self.back_opacity = 75  # 设置窗口不透明度
  8.     self.opacity = 255       # 设置窗口内容不透明
  9.     @alive_enemies = get_alive_enemies
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # * 获取活着的敌人实例
  13.   #--------------------------------------------------------------------------
  14.   def get_alive_enemies
  15.     alive_enemies = []
  16.     $game_troop.members.each do |enemy|
  17.       alive_enemies.push(enemy) if enemy.exist? && !enemy.dead?
  18.     end
  19.     alive_enemies
  20.   end   
  21.   #--------------------------------------------------------------------------  
  22.   # * 获取并绘制敌人的状态图标
  23.   #--------------------------------------------------------------------------
  24.   def draw_enemy_state(ememy_index)
  25.     self.contents.clear
  26.     count = 0
  27.     x = 0
  28.     y = 0
  29.     for state in @alive_enemies[ememy_index].states
  30.       draw_icon(state.icon_index, x, y)
  31.       count +=1
  32.       if count == 2
  33.         x = 0
  34.         y += 24
  35.         count = 0
  36.       else
  37.         x += 24
  38.       end  
  39.     end
  40.   end
  41. end

  42. class Scene_Battle < Scene_Base
  43.   #--------------------------------------------------------------------------
  44.   # * 开始目标敌人选择 - 创建选择敌人指令光标
  45.   #--------------------------------------------------------------------------
  46.   def start_target_enemy_selection
  47.     @target_enemy_window = Window_TargetEnemy.new
  48.     @target_enemy_index = 0                  # 初始化选择的敌人索引
  49.     @info_viewport.rect.x += @target_enemy_window.width
  50.     @info_viewport.ox += @target_enemy_window.width
  51.     @actor_command_window.active = false   
  52.     @target_enemies = get_alive_enemies # 获取活着的敌人
  53.     update_enemy_cursor   # 更新光标位置
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # * 获取活着的敌人实例
  57.   #--------------------------------------------------------------------------
  58.   def get_alive_enemies
  59.     alive_enemies = []
  60.     $game_troop.members.each do |enemy|
  61.       alive_enemies.push(enemy) if enemy.exist? && !enemy.dead?
  62.     end
  63.     alive_enemies
  64.   end   
  65.   #--------------------------------------------------------------------------
  66.   # * 更新目标敌人选择
  67.   #--------------------------------------------------------------------------
  68.   def update_target_enemy_selection
  69.     if Input.trigger?(Input::B)
  70.       Sound.play_cancel
  71.        @enemy_name.visible = false
  72.       end_target_enemy_selection
  73.     elsif Input.trigger?(Input::C)
  74.       Sound.play_decision
  75.       select_enemy(@target_enemies[@target_enemy_index]) if @target_enemies
  76.       
  77.       end_target_enemy_selection
  78.       end_skill_selection
  79.       end_item_selection
  80.       next_actor
  81.     elsif Input.trigger?(Input::RIGHT) || Input.trigger?(Input::DOWN)
  82.       @target_enemy_index = (@target_enemy_index + 1) % @target_enemies.size if @target_enemies
  83.       @enemy_name.visible = false
  84.       update_enemy_cursor
  85.     elsif Input.trigger?(Input::LEFT) || Input.trigger?(Input::UP)
  86.       @target_enemy_index = (@target_enemy_index - 1 + @target_enemies.size) % @target_enemies.size if @target_enemies
  87.       @enemy_name.visible = false
  88.       update_enemy_cursor
  89.     end
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # * 更新敌人光标的位置和名称窗口
  93.   #--------------------------------------------------------------------------
  94.   def update_enemy_cursor
  95.     return unless @target_enemies && @target_enemies[@target_enemy_index] # 确保数组存在且有元素
  96.     enemy = @target_enemies[@target_enemy_index]  # 获取当前选中的敌人
  97.     @target_enemy_window.x = enemy.screen_x - 37 # 更新光标位置到敌人的坐标
  98.     @target_enemy_window.y = enemy.screen_y - 70
  99.     ememy = get_alive_enemies
  100.     @target_enemy_window.draw_enemy_state(@target_enemy_index) # 在光标窗口内部显示敌人状态图标
  101.     @target_enemy_window.visible = true # 确保光标窗口可见
  102.   # 创建敌人名称显示窗口
  103.     @enemy_name = Window_Base.new(@target_enemy_window.x - 40, @target_enemy_window.y + 78, 160, 50)
  104.     @enemy_name.back_opacity = 75
  105.     @enemy_name.opacity = 255
  106.     @enemy_name.contents.clear
  107.     @enemy_name.contents.draw_text(0, 0, enemy.name.length * 22, 22, enemy.name)   
  108.     @enemy_name.visible = true  # 确保敌人名称可见
  109.     play_animation_on_actor_character_window
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # * 光标选定敌人
  113.   #--------------------------------------------------------------------------
  114.   def select_enemy(enemy)
  115.     @active_battler.action.target_index = enemy.index if enemy
  116.   end  
  117.   #--------------------------------------------------------------------------
  118.   # * 结束目标敌人选择
  119.   #--------------------------------------------------------------------------
  120.   def end_target_enemy_selection
  121.     @info_viewport.rect.x -= @target_enemy_window.width
  122.     @info_viewport.ox -= @target_enemy_window.width
  123.     @target_enemy_window.dispose
  124.     @target_enemy_window = nil
  125.     @enemy_name.dispose
  126.     @enemy_name = nil
  127.     @actor_command_window.active = true if @actor_command_window.index == 0
  128.   end
  129. end
复制代码
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-10-22 23:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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