Project1

标题: [已解决]如何给每个角色添加逃跑动画。 [打印本页]

作者: miantouchi    时间: 2019-10-2 08:33
标题: [已解决]如何给每个角色添加逃跑动画。
本帖最后由 miantouchi 于 2019-10-8 10:53 编辑

如上面的图,第一个是成功逃跑情况,姜太公成功逃跑,剩下的人依次逃跑。
第二个是,后面三个人逃跑失败,逃跑失败,显示动画后,角色图片恢复默认的战斗图,如果成了则消失。
                最后哪吒逃跑成功后,剩下的人依次显示逃跑动画后消失。

总的来说就是有一个人跑成功了,其他人依次撤离。翻过论坛帖子很少有这方面的。每个人物逃跑动作就是两个动作。

1.gif (75.72 KB, 下载次数: 33)

1.gif

2.gif (73.16 KB, 下载次数: 32)

2.gif

4.gif (107.88 KB, 下载次数: 29)

4.gif

作者: 灯笼菜刀王    时间: 2019-10-2 10:14
本帖最后由 灯笼菜刀王 于 2019-10-2 15:07 编辑

  逃跑的时候, 调用一个公共事件去折腾就行了, 成功率动画啥的都可以在公共事件里处理,绿色又健康

调用的位置在防御那个帖子里说了, 公共事件调用方法@common_event_id = 10086
作者: YY2019    时间: 2019-10-2 12:28
灯笼菜刀王 发表于 2019-10-2 10:14
逃跑的时候, 调用一个公共事件去折腾就行了, 位置在防御那个帖子里说了, 公共事件调用方法@commo ...

大神能发个超完美七属性(龙战士)变身系统和仿网游小地图吗谢谢



作者: miantouchi    时间: 2019-10-3 22:39
本帖最后由 miantouchi 于 2019-10-3 22:41 编辑
灯笼菜刀王 发表于 2019-10-2 10:14
逃跑的时候, 调用一个公共事件去折腾就行了, 成功率动画啥的都可以在公共事件里处理,绿色又健康 ...


1.我简单选择了2个地方测试(我也弄不准了),系统都不调用这个公共事件,话说,公共事件里面只是简单一句文章和显示特技动画(只为了测试怎么调用公共事件)。
这只是第一步。
2. # 逃跑的情况下
    if @active_battler.is_a?(Game_Enemy) and
       @active_battler.current_action.basic == 2
这个是啥意思,行动方式敌人并且是逃跑状态。(怎么个情况,不是我方人员点击逃跑的情况吗?)


如果上面问题解决了的话,我才能进行下一步,把最开始的开始、逃跑去掉,然后把逃跑加入每个人物菜单的地最下面这是后话。

1.png (30.04 KB, 下载次数: 24)

1.png

2.png (29.27 KB, 下载次数: 25)

2.png

作者: 灯笼菜刀王    时间: 2019-10-3 23:05
本帖最后由 灯笼菜刀王 于 2019-10-3 23:07 编辑
miantouchi 发表于 2019-10-3 22:39
1.我简单选择了2个地方测试(我也弄不准了),系统都不调用这个公共事件,话说,公共事件里面只是简单一 ...


因为只有敌人有"逃跑" 这个行为动作(Game_BattleAction), 角色的"逃跑" 是在步骤2处理的, 并不是"行为动作"

错误原因--------

第一张图, 你在这里处理无效, 原因是执行这段的时候直接就结束战斗了(调用了battle_end), 所以在战斗中"预约"的公共事件不会执行

第二张图, 先不说条件限定了"敌人",  就说 @active_battler.current_action.basic == 2 , 在默认的设置下, 你角色也是无法达到的, 因为XP默认的"逃跑"选项并没有执行 @active_battler.current_action.basic = 2 的操作

正确做法--------------

你要把敌人限定去掉, 并给角色"选择逃跑指令" 后, 让他的current_action.basic = 2  就可以和敌人一样进行"单独逃跑行为"了, 怎么做, 可以参考"防御"

===============
提醒:  @active_battler 是当前行动者, 它包括了角色和敌人, 所以默认的逃跑处理才会加上"is_a?" 来区分处理,  如果你的角色和敌人要采用不同的处理方法, 记得也要加上 is_a? 判断

比如, 你上面的防御,  仅判断ID的话, 那敌人也是有"ID为1,2,3,4"的情况哦
作者: miantouchi    时间: 2019-10-4 09:36
本帖最后由 miantouchi 于 2019-10-4 09:42 编辑
灯笼菜刀王 发表于 2019-10-3 23:05
因为只有敌人有"逃跑" 这个行为动作(Game_BattleAction), 角色的"逃跑" 是在步骤2处理的, 并不 ...



哦,我现在处于似懂非懂状态了。
1.默认的战斗系统,是开始就让选择“战斗”、“逃跑”,如果我选择逃跑直接就调用battle_end,返回地图了,根本没有机会显示调用公共事件。
后来我就在def update_phase2这个里面@active_battler.current_action.basic = 2 ,系统会报错,因为系统这个时候还没有定义@active_battler。

2.出现了1里面的问题后,我根据你的提示,参考了XP默认防御的写法,在def update_phase3_basic_command里面添加了when 4 逃跑情况,这里面@active_battler.current_action.basic = 2加了一句
就是这个角色选择了逃跑后

3.最后def make_basic_action_result,里面去掉了敌人模式的限制,并且设置动画。

4.完善了你说的用id判断防御的漏洞


问:
1.现在的想法是第1个里面问题比较多,就是用默认的系统,不把逃跑加到每个角色的菜单里面就会出现我遇到的2个问题,能用默认的界面,战斗、逃跑,如果选择逃跑,每个角色都显示逃跑动画吗?(话说这不是我要的最终结果,只是讨论下,怎么才能在这一步执行出来公共事件)
2.你说只有敌人有"逃跑" 这个行为动作(Game_BattleAction),Game_BattleAction在 Game_Battler 类的内部使用,Game_BattleAction中basic有逃跑,怎么就单独敌人有呢?
还是说F1当中RPG::Enemy::Action,basic 种类为「基本」时,其内容(0:攻击,1:防御,2:逃跑,3:什么也不做)。有这一项呢?

以上第一种方式操作,自己出现语法等问题,第二种是一种思路的演练,代码还需完善。

1.png (70.87 KB, 下载次数: 29)

1.png

2.png (74.22 KB, 下载次数: 24)

2.png

3.png (75.11 KB, 下载次数: 32)

3.png

4.png (19.63 KB, 下载次数: 30)

4.png

作者: 灯笼菜刀王    时间: 2019-10-4 09:51
本帖最后由 灯笼菜刀王 于 2019-10-4 09:56 编辑
miantouchi 发表于 2019-10-4 09:36
哦,我现在处于似懂非懂状态了。
1.默认的战斗系统,是开始就让选择“战斗”、“逃跑”,如果我选择逃跑 ...


1, 当然可以, 选择逃跑后直接启动一个公共事件, 然后公共事件里全员播放逃跑动画, 顺便处理逃跑几率,成功失败等即可

2, 我是说"XP默认的战斗脚本里, 只有敌人有逃跑这个basic的赋值", 原因已经说了, 角色你选择逃跑的时候是直接处理的, 不是像攻击防御一样通过给角色赋值basic 走流程, 所以默认的情况下角色永远不会有 basic == 2 这个行为(除非强制行动,然而逃跑的处理限定了敌人, 所以角色不会有任何效果)

而敌人的逃跑是和攻击防御一样走流程的, 轮到它的时候才执行, 而且只影响它自己, 这就和你要的效果一致咯

你只要在逃跑处理上, 区分出角色来,然后按ID预约公共事件, 就可以做到每个人分别判断逃跑成功率和逃跑动作了,  甚至可以做到FF10的逃跑(自顾自跑, 只要跑掉一个人就不会被全灭)
作者: miantouchi    时间: 2019-10-4 15:17
灯笼菜刀王 发表于 2019-10-4 09:51
1, 当然可以, 选择逃跑后直接启动一个公共事件, 然后公共事件里全员播放逃跑动画, 顺便处理逃跑几率,成功 ...

崩溃了,我直接改成上图那样,用@common_event_id = 1 没有任何效果,下面强行在结束前刷新下,但是感觉动画没有秒播放后直接返还地图,好歹看到特效了。

1.png (64.48 KB, 下载次数: 21)

1.png

2.png (62.42 KB, 下载次数: 32)

2.png

作者: 灯笼菜刀王    时间: 2019-10-4 15:41
本帖最后由 灯笼菜刀王 于 2019-10-4 15:42 编辑

  #--------------------------------------------------------------------------
  # ● 刷新画面 (同伴命令回合)
  #--------------------------------------------------------------------------
  def update_phase2
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 同伴指令窗口光标位置分支
      case @party_command_window.index
      when 0  # 战斗
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 开始角色的命令回合
        start_phase3
      when 1  # 逃跑
        # 不能逃跑的情况下
        if $game_temp.battle_can_escape == false
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 逃走处理
        #update_phase2_escape
        common_event = $data_common_events[10086]
        $game_system.battle_interpreter.setup(common_event.list, 0)
        # 清除全体同伴的行动
        $game_party.clear_actions
        # 开始主回合
        start_phase4

      end
      return
    end
  end
作者: 灯笼菜刀王    时间: 2019-10-4 19:40
本帖最后由 灯笼菜刀王 于 2019-10-4 19:41 编辑

直接给你栗子吧

首先你顾虑到用公共事件去做逃跑判断太麻烦,  那只要改造下之前屏蔽的这个

  #--------------------------------------------------------------------------
  # ● 画面更新 (同伴指令回合 : 逃跑)
  #--------------------------------------------------------------------------
  def update_phase2_escape
    # 计算敌人速度的平均值
    enemies_agi = 0
    enemies_number = 0
    for enemy in $game_troop.enemies
      if enemy.exist?
        enemies_agi += enemy.agi
        enemies_number += 1
      end
    end
    if enemies_number > 0
      enemies_agi /= enemies_number
    end
    # 计算角色速度的平均值
    actors_agi = 0
    actors_number = 0
    for actor in $game_party.actors
      if actor.exist?
        actors_agi += actor.agi
        actors_number += 1
      end
    end
    if actors_number > 0
      actors_agi /= actors_number
    end
    # 逃跑成功判定
    success = rand(100) < 50 * actors_agi / enemies_agi
    # 成功逃跑的情况下
    if success
      # 演奏逃跑 SE
      $game_system.se_play($data_system.escape_se)
      # 还原为战斗开始前的 BGM
      $game_system.bgm_play($game_temp.map_bgm)
      # 战斗结束
      battle_end(1)
    # 逃跑失败的情况下
    else
      # 清除全体同伴的行动
      $game_party.clear_actions
      # 开始主回合
      start_phase4
    end
  end


红色的这段全不要, 因为这段就是处理计算后的结果了, 我们拿到公共事件里处理 ,改造后的脚本是这样

  #--------------------------------------------------------------------------
  # ● 画面更新 (同伴指令回合 : 逃跑)
  #--------------------------------------------------------------------------
  def update_phase2_escape
    # 计算敌人速度的平均值
    enemies_agi = 0
    enemies_number = 0
    for enemy in $game_troop.enemies
      if enemy.exist?
        enemies_agi += enemy.agi
        enemies_number += 1
      end
    end
    if enemies_number > 0
      enemies_agi /= enemies_number
    end
    # 计算角色速度的平均值
    actors_agi = 0
    actors_number = 0
    for actor in $game_party.actors
      if actor.exist?
        actors_agi += actor.agi
        actors_number += 1
      end
    end
    if actors_number > 0
      actors_agi /= actors_number
    end
    # 逃跑成功判定
    return (rand(100) < 50 * actors_agi / enemies_agi) #让这段函数返回计算后的结果
end

然后公共事件里这样设置


作者: miantouchi    时间: 2019-10-6 18:42
本帖最后由 miantouchi 于 2019-10-6 18:50 编辑
灯笼菜刀王 发表于 2019-10-4 19:40
直接给你栗子吧

首先你顾虑到用公共事件去做逃跑判断太麻烦,  那只要改造下之前屏蔽的这个

打不死的小强又来了!!!
是这个思路吗?有点写不下去了,我把逃跑加入每个角色列表了,然后在怪物逃跑处做了一个角色分歧。
每个角色做一个事件(还没写事件)每个事件有每个角色的逃跑动画、逃跑几率。
打算是
哪吒逃跑成功率      =50 × 哪吒速度 ÷ 敌人的速度平均值
小龙女逃跑成功率   =50 × 小龙女速度 ÷ 敌人的速度平均值
杨戬逃跑成功率      =50 × 杨戬速度 ÷ 敌人的速度平均值
姜太公逃跑成功率 =50 × 姜太公速度 ÷ 敌人的速度平均值
各自计算各自的逃跑成功率。

1.png (54.99 KB, 下载次数: 25)

1.png

2.png (77.66 KB, 下载次数: 26)

2.png

3.png (79.71 KB, 下载次数: 23)

3.png

4.png (54.35 KB, 下载次数: 25)

4.png

作者: miantouchi    时间: 2019-10-7 14:21
本帖最后由 miantouchi 于 2019-10-7 16:33 编辑
miantouchi 发表于 2019-10-6 18:42
打不死的小强又来了!!!
是这个思路吗?有点写不下去了,我把逃跑加入每个角色列表了,然后在怪物逃跑处 ...


怎么报错了,弄了半天也找不到原因,暂时把每个人的逃跑成功率写死了。

1.png (66.11 KB, 下载次数: 22)

1.png

2.png (44.4 KB, 下载次数: 21)

2.png

3.png (15.3 KB, 下载次数: 23)

3.png

1.png (44.87 KB, 下载次数: 21)

1.png

2.png (61.16 KB, 下载次数: 24)

2.png

作者: miantouchi    时间: 2019-10-7 21:08
本帖最后由 miantouchi 于 2019-10-7 21:16 编辑
miantouchi 发表于 2019-10-7 14:21
怎么报错了,弄了半天也找不到原因,暂时把每个人的逃跑成功率写死了。 ...


最后一个问题了,解决这个问题应该就彻底解决了,我把逃跑成功后,每个人都加上动画,通过更改角色图形方式(设置一个新的空白图片),,并不是战斗时的战斗图没有,似乎对战斗图没起到作用。每次都是返回到地图界面后,行走图没了

1.png (49.23 KB, 下载次数: 24)

1.png

4.png (16.01 KB, 下载次数: 24)

4.png





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