Project1

标题: 关于Scene_Battle中的选择敌人的方法 [打印本页]

作者: qq634488405    时间: 2013-5-10 15:55
标题: 关于Scene_Battle中的选择敌人的方法
本帖最后由 qq634488405 于 2013-5-11 17:41 编辑

想问一下,在实际操作中,这个方法的返回值是什么?
作者: q86332682    时间: 2013-5-10 21:14
具体是什么方法?
作者: wwwcctvty    时间: 2013-5-10 21:17
\\\\\、、、、、、、这个类中的方法不是一般的多呀?楼主指的哪一个方法?
作者: 芯☆淡茹水    时间: 2013-5-10 23:55
本帖最后由 芯☆淡茹水 于 2013-5-11 01:42 编辑

选择敌人?是指怎样确定行动对象么?
那看看下面这段

RUBY 代码复制
  1. if @active_battler.is_a?(Game_Actor)
  2.         if @active_battler.restriction == 3
  3.           target = $game_party.random_target_actor
  4.         elsif @active_battler.restriction == 2
  5.           target = $game_troop.random_target_enemy
  6.         else
  7.           index = @active_battler.current_action.target_index
  8.           target = $game_troop.smooth_target_enemy(index)
  9.         end
  10.       end


这段是普通攻击确定对象(角色用),添加下注释,就会很好理解

如果行动方是角色
if @active_battler.is_a?(Game_Actor)
      如果行动者限制 等于 3 (普通攻击同伴)
   if @active_battler.restriction == 3
       行动对象 等于 随机角色
      target = $game_party.random_target_actor
        除此以外,如果行动者限制 等于 2 (普通攻击敌人)
    elsif @active_battler.restriction == 2
          行动对象 等于 随机敌人
      target = $game_troop.random_target_enemy
       除此以外
    else
         行动对象 等于 光标所选中的敌人
      index = @active_battler.current_action.target_index
      target = $game_troop.smooth_target_enemy(index)
    end
end

最终选择好的敌人就是那个  target

然后就是:
# 设置对像方的战斗者序列
@target_battlers = [target]
# 应用通常攻击效果
  for target in @target_battlers
     target.attack_effect(@active_battler)
  end


这些确定行动对象,都在 Scene_Battle 4 第 170 多行开始(包括基本攻击,特技和物品)
作者: q86332682    时间: 2013-5-11 15:47
    # 按下 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
#在这里确定敌人成员数,决定应用选择光标或转到下一个角色的指令输入。
    # 按下 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
        #敌人成员数为1的情况。
        if $game_troop.enemies.size == 1  
          phase3_next_actor      #转到下一个角色指令输入。
       else
          start_enemy_select      #开始选择敌人。
       end


作者: q86332682    时间: 2013-5-11 15:57
好吧,忘了行动对象索引了。
在if $game_troop.enemies.size == 1 底下
@active_battler.current_action.target_index = $game_troop.enemies[0].index
作者: q86332682    时间: 2013-5-11 23:23
换成以下代码的话,敌人只有一个,或战斗中只剩一个敌人都没问题。
        count = 0
        enemy = nil
        for i in 0...$game_troop.enemies.size
          if $game_troop.enemies[i].exist?
            count +=1
            enemy = $game_troop.enemies[i]
          end
        end
        if count == 1 and enemy != nil
          @battler.current_action.target_index = enemy.index
          phase2_next_actor
          return
        end




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1