查看: 2417|回复: 7

[已经解决] 敌人列表显示的一些小问题

[复制链接]
梦石
0
星屑
3181
在线时间
1439 小时
注册时间
2009-7-27
回帖
1187
发表于 2017-10-14 13:45:47 | 显示全部楼层 |阅读模式

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

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

×
这个脚本用技能时或者使用对敌人的物品时,说明会与敌人的名字信息栏重叠,请大神们帮忙解决一下。
还有就是希望这个选项列表可以改成横向选择的,请大神们帮帮忙。感激不尽
11.jpg

Project4.7z (182.95 KB, 下载次数: 75)


博客:我的博客
梦石
0
星屑
2724
在线时间
227 小时
注册时间
2016-3-27
回帖
557
发表于 2017-10-14 18:11:44 | 显示全部楼层
本帖最后由 WantMy蕙 于 2017-10-14 19:08 编辑

终于终于终于,最终版本,没bug了吧现在。这个是你原来那个脚本,我修改了,直接整个替换吧,第二个直接整个替换Scene_battle3,其实改的不是很多但是为了楼主方便,然后也为了我能说清楚。。。[pre lang="ruby"]#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的类。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 开始选择敌人
  #--------------------------------------------------------------------------
  def start_enemy_select
    # 生成敌人箭头
    @enemy_arrow = Window_TargetEnemy.new
    @enemy_arrow.x = 224 #- @enemy_arrow.width / 2
    @enemy_arrow.y = 80  #- @enemy_arrow.height / 2
    @enemy_arrow.width = 160
    @enemy_arrow.height = 160
    @enemy_arrow.opacity = 160
    @enemy_help_window ||= Window_Help.new
    @enemy_help_window.back_opacity = 160
    @enemy_help_window.visible = true
    @enemy_help_window.set_enemy(@enemy_arrow.enemy)
    # 无效化角色指令窗口

   
          # 显示特技窗口中的情况下
      if @skill_window != nil
        # 结束特技选择
        end_skill_select
      end
      # 显示物品窗口的情况下
      if @item_window != nil
        # 结束物品选择
        end_item_select
      end
      @actor_command_window.active = false
      @actor_command_window.visible = false
    end
  #--------------------------------------------------------------------------
  # ● 结束选择敌人
  #--------------------------------------------------------------------------
  alias shanguangjinshanshan_end_enemy_select end_enemy_select
  def end_enemy_select
    shanguangjinshanshan_end_enemy_select
    @enemy_help_window.visible = false
  end
  alias shanguangjinshanshan_update update
  def update
    shanguangjinshanshan_update
    @shanguang_count ||= 0
    @shanguang_count += 1
    if @enemy_arrow != nil and @shanguang_count > 30
      @shanguang_count = 0
      @spriteset.enemy_sprites.reverse[@enemy_arrow.index].flash(@enemy_arrow.text_color(0), 20)
    end
  end

end
class Spriteset_Battle;attr_accessor   :enemy_sprites;end
class Window_TargetEnemy < Window_Command
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    commands = []
    @enemies = []
    for enemy in $game_troop.enemies
      next unless enemy.exist?
      commands.push(enemy.name)
      @enemies.push(enemy)
    end
    super(160, commands)
    #@column_max = 2
  end
  #--------------------------------------------------------------------------
  # ● 获取敌人对象
  #--------------------------------------------------------------------------
  def enemy
    return @enemies[@index]
  end

end
[/pre]


[pre lang="ruby"]#==============================================================================
# ■ Scene_Battle (分割定义 3)
#------------------------------------------------------------------------------
#  处理战斗画面的类。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 开始角色命令回合
  #--------------------------------------------------------------------------
  def start_phase3
    # 转移到回合 3
    @phase = 3
    # 设置角色为非选择状态
    @actor_index = -1
    @active_battler = nil
    # 输入下一个角色的命令
    phase3_next_actor
  end
  #--------------------------------------------------------------------------
  # ● 转到输入下一个角色的命令
  #--------------------------------------------------------------------------
  def phase3_next_actor
    # 循环
    begin
      # 角色的明灭效果 OFF
      if @active_battler != nil
        @active_battler.blink = false
      end
      # 最后的角色的情况
      if @actor_index == $game_party.actors.size-1
        # 开始主回合
        start_phase4
        return
      end
      # 推进角色索引
      @actor_index += 1
      @active_battler = $game_party.actors[@actor_index]
      @active_battler.blink = true
    # 如果角色是在无法接受指令的状态就再试
    end until @active_battler.inputable?
    # 设置角色的命令窗口
    phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # ● 转向前一个角色的命令输入
  #--------------------------------------------------------------------------
  def phase3_prior_actor
    # 循环
    begin
      # 角色的明灭效果 OFF
      if @active_battler != nil
        @active_battler.blink = false
      end
      # 最初的角色的情况下
      if @actor_index == 0
        # 开始同伴指令回合
        start_phase2
        return
      end
      # 返回角色索引
      @actor_index -= 1
      @active_battler = $game_party.actors[@actor_index]
      @active_battler.blink = true
    # 如果角色是在无法接受指令的状态就再试
    end until @active_battler.inputable?
    # 设置角色的命令窗口
    phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # ● 设置角色指令窗口
  #--------------------------------------------------------------------------
  def phase3_setup_command_window
    # 同伴指令窗口无效化
    @party_command_window.active = false
    @party_command_window.visible = false
    # 角色指令窗口无效化
    @actor_command_window.active = true
    @actor_command_window.visible = true
    # 设置角色指令窗口的位置
    @actor_command_window.x = @actor_index * 160
    # 设置索引为 0
    @actor_command_window.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (角色命令回合)
  #--------------------------------------------------------------------------
  def update_phase3
    # 敌人光标有效的情况下
    if @enemy_arrow != nil
      update_phase3_enemy_select
    # 角色光标有效的情况下
    elsif @actor_arrow != nil
      update_phase3_actor_select
    # 特技窗口有效的情况下
    elsif @skill_window != nil
      update_phase3_skill_select
    # 物品窗口有效的情况下
    elsif @item_window != nil
      update_phase3_item_select
    # 角色指令窗口有效的情况下
    elsif @actor_command_window.active
      update_phase3_basic_command
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (角色命令回合 : 基本命令)
  #--------------------------------------------------------------------------
  def update_phase3_basic_command
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 转向前一个角色的指令输入
      phase3_prior_actor
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 角色指令窗口光标位置分之
      case @actor_command_window.index
      when 0  # 攻击
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
        # 开始选择敌人
        start_enemy_select
      when 1  # 特技
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 1
        # 开始选择特技
        start_skill_select
      when 2  # 防御
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        # 转向下一位角色的指令输入
        phase3_next_actor
      when 3  # 物品
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 2
        # 开始选择物品
        start_item_select
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (角色命令回合 : 选择特技)
  #--------------------------------------------------------------------------
  def update_phase3_skill_select
    # 设置特技窗口为可视状态
    @skill_window.visible = true
    # 刷新特技窗口
    @skill_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 结束特技选择
      end_skill_select
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取特技选择窗口现在选择的特技的数据
      @skill = @skill_window.skill
      # 无法使用的情况下
      if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 设置行动
      @active_battler.current_action.skill_id = @skill.id
      # 设置特技窗口为不可见状态
      @skill_window.visible = false
      # 效果范围是敌单体的情况下
      if @skill.scope == 1
        # 开始选择敌人
        start_enemy_select
      # 效果范围是我方单体的情况下
      elsif @skill.scope == 3 or @skill.scope == 5
        # 开始选择角色
        start_actor_select
      # 效果范围不是单体的情况下
      else
        # 选择特技结束
        end_skill_select
        # 转到下一位角色的指令输入
        phase3_next_actor
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (角色命令回合 : 选择物品)
  #--------------------------------------------------------------------------
  def update_phase3_item_select
    # 设置物品窗口为可视状态
    @item_window.visible = true
    # 刷新物品窗口
    @item_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 选择物品结束
      end_item_select
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取物品窗口现在选择的物品资料
      @item = @item_window.item
      # 无法使用的情况下
      unless $game_party.item_can_use?(@item.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 设置行动
      @active_battler.current_action.item_id = @item.id
      # 设置物品窗口为不可见状态
      @item_window.visible = false
      # 效果范围是敌单体的情况下
      if @item.scope == 1
        # 开始选择敌人
        start_enemy_select
      # 效果范围是我方单体的情况下
      elsif @item.scope == 3 or @item.scope == 5
        # 开始选择角色
        start_actor_select
      # 效果范围不是单体的情况下
      else
        # 物品选择结束
        end_item_select
        # 转到下一位角色的指令输入
        phase3_next_actor
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面画面 (角色命令回合 : 选择敌人)
  #--------------------------------------------------------------------------
  def update_phase3_enemy_select
    # 刷新敌人箭头
    @enemy_arrow.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 选择敌人结束
      end_enemy_select
      @actor_command_window.active = true
      @actor_command_window.visible = true
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 设置行动
      @active_battler.current_action.target_index = @enemy_arrow.index
      # 选择敌人结束
      end_enemy_select
      # 显示特技窗口中的情况下
      if @skill_window != nil
        # 结束特技选择
        end_skill_select
      end
      # 显示物品窗口的情况下
      if @item_window != nil
        # 结束物品选择
        end_item_select
      end
      # 转到下一位角色的指令输入
      phase3_next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● 画面更新 (角色指令回合 : 选择角色)
  #--------------------------------------------------------------------------
  def update_phase3_actor_select
    # 刷新角色箭头
    @actor_arrow.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 选择角色结束
      end_actor_select
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 设置行动
      @active_battler.current_action.target_index = @actor_arrow.index
      # 选择角色结束
      end_actor_select
      # 显示特技窗口中的情况下
      if @skill_window != nil
        # 结束特技选择
        end_skill_select
      end
      # 显示物品窗口的情况下
      if @item_window != nil
        # 结束物品选择
        end_item_select
      end
      # 转到下一位角色的指令输入
      phase3_next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● 开始选择敌人
  #--------------------------------------------------------------------------
  def start_enemy_select
    # 生成敌人箭头
    @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
    # 关联帮助窗口
    @enemy_arrow.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 结束选择敌人
  #--------------------------------------------------------------------------
  def end_enemy_select
    # 释放敌人箭头
    @enemy_arrow.dispose
    @enemy_arrow = nil
    # 指令为 [战斗] 的情况下
    if @actor_command_window.index == 0
      # 有效化角色指令窗口
      @actor_command_window.active = true
      @actor_command_window.visible = true
      # 隐藏帮助窗口
      @help_window.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # ● 开始选择角色
  #--------------------------------------------------------------------------
  def start_actor_select
    # 生成角色箭头
    @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
    @actor_arrow.index = @actor_index
    # 关联帮助窗口
    @actor_arrow.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 结束选择角色
  #--------------------------------------------------------------------------
  def end_actor_select
    # 释放角色箭头
    @actor_arrow.dispose
    @actor_arrow = nil
  end
  #--------------------------------------------------------------------------
  # ● 开始选择特技
  #--------------------------------------------------------------------------
  def start_skill_select
    # 生成特技窗口
    @skill_window = Window_Skill.new(@active_battler)
    # 关联帮助窗口
    @skill_window.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 选择特技结束
  #--------------------------------------------------------------------------
  def end_skill_select
    # 释放特技窗口
    @skill_window.dispose
    @skill_window = nil
    # 隐藏帮助窗口
    @help_window.visible = false
    # 有效化角色指令窗口
    @actor_command_window.active = true
    @actor_command_window.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 开始选择物品
  #--------------------------------------------------------------------------
  def start_item_select
    # 生成物品窗口
    @item_window = Window_Item.new
    # 关联帮助窗口
    @item_window.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 结束选择物品
  #--------------------------------------------------------------------------
  def end_item_select
    # 释放物品窗口
    @item_window.dispose
    @item_window = nil
    # 隐藏帮助窗口
    @help_window.visible = false
    # 有效化角色指令窗口
    @actor_command_window.active = true
    @actor_command_window.visible = true
  end
end
[/pre]

点评

服了,再也不帮别人改脚本了呵呵,一句谢谢都不用说  发表于 2017-10-15 00:12
至于横向,还没有写过类似的command,我想参照商店和战斗回合开始那个窗口去写,但是好像要确定个数才可以?具体不清楚不想看了,纵向也不错啦  发表于 2017-10-14 19:16

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 谢谢
爆焰 + 1 谢谢,只是没留意直接看到楼下去了而已.

查看全部评分

现在还能改名吗qwq
回复

使用道具 举报

梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2017-10-14 20:09:48 | 显示全部楼层
  1. #==============================================================================
  2. # ■ Scene_Battle
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 开始选择敌人
  9.   #--------------------------------------------------------------------------
  10.   def start_enemy_select
  11.     # 生成敌人箭头
  12.     @enemy_arrow = Window_TargetEnemy.new
  13.     @enemy_arrow.x = (640 - @enemy_arrow.width) / 2
  14.     @enemy_arrow.y = (480 - @enemy_arrow.height) / 2
  15.     @enemy_arrow.opacity = 160
  16.     @enemy_help_window ||= Window_Help.new
  17.     @enemy_help_window.back_opacity = 160
  18.     @enemy_help_window.visible = true
  19.     @enemy_help_window.set_enemy(@enemy_arrow.enemy)
  20.     # 无效化角色指令窗口
  21.     @actor_command_window.active = false
  22.     @actor_command_window.visible = false
  23.    
  24.     @skill_window.help_window.visible = false if @skill_window != nil
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 结束选择敌人
  28.   #--------------------------------------------------------------------------
  29.   alias shanguangjinshanshan_end_enemy_select end_enemy_select
  30.   def end_enemy_select
  31.     shanguangjinshanshan_end_enemy_select
  32.     @enemy_help_window.visible = false
  33.   end
  34.   alias shanguangjinshanshan_update update
  35.   def update
  36.     shanguangjinshanshan_update
  37.     @shanguang_count ||= 0
  38.     @shanguang_count += 1
  39.     if @enemy_arrow != nil and @shanguang_count > 30
  40.       @shanguang_count = 0
  41.       @spriteset.enemy_sprites.reverse[@enemy_arrow.index].flash(@enemy_arrow.text_color(0), 20)
  42.     end
  43.   end
  44. end
  45. class Spriteset_Battle;attr_accessor   :enemy_sprites;end
  46. class Window_TargetEnemy < Window_Base#Selectable
  47.   #--------------------------------------------------------------------------
  48.   # ● 获取敌人对象
  49.   #--------------------------------------------------------------------------
  50.   def enemy
  51.     return @enemies[@index]
  52.   end
  53.   
  54.   def initialize
  55.     commands = []
  56.     @enemies = []
  57.     for enemy in $game_troop.enemies
  58.       next unless enemy.exist?
  59.       commands.push(enemy.name)
  60.       @enemies.push(enemy)
  61.     end

  62.     super(0, 0, commands.size * 36 + 32, 64)
  63.     @item_max = commands.size
  64.     @commands = commands
  65.     self.contents = Bitmap.new(@item_max * 36, 32)
  66.     refresh
  67.     @index = 0
  68.   end
  69.   def index;return @index;end
  70.   def refresh
  71.     self.contents.clear
  72.     for i in 0...@item_max
  73.       draw_item(i, normal_color)
  74.     end
  75.   end
  76.   def draw_item(index, color)
  77.     self.contents.font.color = color
  78.     rect = Rect.new(index * 36, 0, 32, 32)
  79.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  80.     self.contents.draw_text(rect, @commands[index])
  81.   end  
  82.   #--------------------------------------------------------------------------
  83.   # ● 刷新画面
  84.   #--------------------------------------------------------------------------
  85.   def update
  86.     super
  87.     self.cursor_rect.set(@index * 36, 0, 32, 32)
  88.     if self.active and @item_max > 0 and @index >= 0
  89.       if Input.repeat?(Input::RIGHT) and @index < @item_max-1
  90.         $game_system.se_play($data_system.cursor_se)
  91.         @index += 1
  92.       end
  93.       if Input.repeat?(Input::LEFT) and @index > 0
  94.         $game_system.se_play($data_system.cursor_se)
  95.         @index -= 1
  96.       end
  97.     end
  98.   end
  99. end
复制代码

点评

就是一页不直接显示8个敌人,而是有后面的延续可以选择。不过就这样吧,我自己试着修改一下,当做练习。谢谢你这么耐心。O(∩_∩)O~  发表于 2017-10-15 09:15
上限8个怪都没事,怎么翻页  发表于 2017-10-14 22:17
你总算来了,这个脚本还是有点问题,就是超过几个怪无法翻页,请看一下怎么回事  发表于 2017-10-14 21:14

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 认可答案
爆焰 + 1 塞糖

查看全部评分

回复 1 0

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部