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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14171
在线时间
2145 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

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

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

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

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

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

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

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

1.gif

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

2.gif

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

4.gif

Lv4.逐梦者

梦石
0
星屑
14171
在线时间
2145 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

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


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

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

1.png

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

4.png

点评

这就让我很纠结了,好像是用了真移位,造成改战斗图不好使。  发表于 2019-10-8 13:21
大个比方吧,逃跑失败需要对象消失20帧,逃跑成功需要对象消失80帧(等待其他人)  发表于 2019-10-8 13:20
因为逃跑成功的话,对象消失时间还要等其余几个人的时间,逃跑失败对象消失时间就谁也不用等。  发表于 2019-10-8 12:53
播放动画的时候用对象消失就可以让战斗图消失了  发表于 2019-10-8 12:08
行走图没了是因为你把"脸谱"设置为空的  发表于 2019-10-8 12:06
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14171
在线时间
2145 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

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


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

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

1.png

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

2.png

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

3.png

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

1.png

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

2.png

点评

应该是我p 随机数的原因,P那一遍随机了一下,真正返回的又是一次,我服了  发表于 2019-10-7 18:58
我p了下怪物的平均速度和我方角色的速度都是系统的数值。  发表于 2019-10-7 16:35
本楼最后2张图片我又更新了下每个人的逃跑几率算法,但是现在奇怪的是,有时候返回true不逃跑,个别时候false还逃跑了,奇了怪了。  发表于 2019-10-7 16:34
我真是一步一坎,所有错误都要犯一遍的感觉,总算弄好了,感觉胜利就在曙光了  发表于 2019-10-7 15:44
错误原因2, a是局部变量, 只能在一个脚本框内调用, 要在外面调用要换成 @a  发表于 2019-10-7 14:44
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14171
在线时间
2145 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

11
 楼主| 发表于 2019-10-6 18:42:52 | 只看该作者
本帖最后由 miantouchi 于 2019-10-6 18:50 编辑
灯笼菜刀王 发表于 2019-10-4 19:40
直接给你栗子吧

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

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

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

1.png

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

2.png

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

3.png

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

4.png

点评

帮我看看下楼下  发表于 2019-10-7 14:22
事件脚本里, a=$scene.instance_variable_get(:@active_battler) 这样写, a就是当前行动者, 用一个公共事件就可以啦  发表于 2019-10-6 21:35
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37962
在线时间
5488 小时
注册时间
2006-11-10
帖子
6555
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
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37962
在线时间
5488 小时
注册时间
2006-11-10
帖子
6555
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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14171
在线时间
2145 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

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

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

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

1.png

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

2.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37962
在线时间
5488 小时
注册时间
2006-11-10
帖子
6555
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
星屑
14171
在线时间
2145 小时
注册时间
2019-1-24
帖子
1121

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, 下载次数: 17)

1.png

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

2.png

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

3.png

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

4.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37962
在线时间
5488 小时
注册时间
2006-11-10
帖子
6555
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"的情况哦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-23 01:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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