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

Project1

 找回密码
 注册会员
搜索
查看: 4737|回复: 46
打印 上一主题 下一主题

[已经解决] [已解决]如何给每个角色添加逃跑动画。

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2019-10-2 08:33:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 miantouchi 于 2019-10-8 10:53 编辑

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

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

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

1.gif

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

2.gif

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

4.gif

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2019-10-2 10:14:59 | 只看该作者
本帖最后由 灯笼菜刀王 于 2019-10-2 15:07 编辑

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

调用的位置在防御那个帖子里说了, 公共事件调用方法@common_event_id = 10086
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1157
在线时间
192 小时
注册时间
2019-3-20
帖子
24
3
发表于 2019-10-2 12:28:13 | 只看该作者
灯笼菜刀王 发表于 2019-10-2 10:14
逃跑的时候, 调用一个公共事件去折腾就行了, 位置在防御那个帖子里说了, 公共事件调用方法@commo ...

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


点评

不能, 谁知道那是啥玩意, 没人回先自己看看提问的方式, 自己和楼主的提问贴对比下, 为什么人家就能快速完整的得到自己需要的答案  发表于 2019-10-2 15:02
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

4
 楼主| 发表于 2019-10-3 22:39:09 | 只看该作者
本帖最后由 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, 下载次数: 27)

1.png

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

2.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
5
发表于 2019-10-3 23:05:08 | 只看该作者
本帖最后由 灯笼菜刀王 于 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"的情况哦
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

6
 楼主| 发表于 2019-10-4 09:36:44 | 只看该作者
本帖最后由 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, 下载次数: 31)

1.png

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

2.png

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

3.png

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

4.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
7
发表于 2019-10-4 09:51:52 | 只看该作者
本帖最后由 灯笼菜刀王 于 2019-10-4 09:56 编辑
miantouchi 发表于 2019-10-4 09:36
哦,我现在处于似懂非懂状态了。
1.默认的战斗系统,是开始就让选择“战斗”、“逃跑”,如果我选择逃跑 ...


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

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

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

你只要在逃跑处理上, 区分出角色来,然后按ID预约公共事件, 就可以做到每个人分别判断逃跑成功率和逃跑动作了,  甚至可以做到FF10的逃跑(自顾自跑, 只要跑掉一个人就不会被全灭)

点评

第一种情况,我应该在哪里写?该死的battle_end(1),一运行到这里面返回到地图,根本不给我机会播放动画。。。。。  发表于 2019-10-4 11:11

评分

参与人数 2星屑 +100 +2 收起 理由
guoxiaomi + 100 + 1 认可答案
miantouchi + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

8
 楼主| 发表于 2019-10-4 15:17:57 | 只看该作者
灯笼菜刀王 发表于 2019-10-4 09:51
1, 当然可以, 选择逃跑后直接启动一个公共事件, 然后公共事件里全员播放逃跑动画, 顺便处理逃跑几率,成功 ...

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

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

1.png

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

2.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
9
发表于 2019-10-4 15:41:44 | 只看该作者
本帖最后由 灯笼菜刀王 于 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-5 23:41
你说的是我7楼里的 第二种 做法  发表于 2019-10-5 23:38
判定失败则跳过步骤3,以我方全员发呆状态进入步骤4,  发表于 2019-10-5 23:36
这又不是"单独行动", 这个是"直接判断", 它是"步骤2", 在"输入指令(步骤3)" 和"开始战斗(步骤4)"之前, 判定成功直接中断战斗   发表于 2019-10-5 23:35
正常不应该是,生成顺序、然后按照速度排序,到了我方或者敌人角色就执行对应的动作吗?  发表于 2019-10-5 22:18
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
10
发表于 2019-10-4 19:40:00 | 只看该作者
本帖最后由 灯笼菜刀王 于 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

然后公共事件里这样设置

点评

而不是选择逃跑后,理解执行逃跑动画的。  发表于 2019-10-5 21:00
我在一楼又补充了一个逃跑动画,他们是按照正常角色的顺序,轮到了在逃跑,死亡的角色不参与逃跑动画  发表于 2019-10-5 20:59
我怎么感觉又绕到昨天你第一次给我的代码,屏蔽update_phase2_escape,用公共事件取代  发表于 2019-10-5 15:38
你绕路了, 单体逃跑比群体简单, 因为它参与了正常流程, 所以直接预约公共事件即可  发表于 2019-10-5 11:04
整体逃跑效果实现了,现在弄把逃跑加入每个人的菜单里里面。看样子还要改代码,计算每个人的逃跑几率,默认系统是角色和敌人和平均的比较。  发表于 2019-10-5 10:13
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-27 11:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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