首页 > 其他分享 >38. 敌人的动画执行逻辑

38. 敌人的动画执行逻辑

时间:2024-03-11 13:33:07浏览次数:26  
标签:动画 逻辑 38 Self 站立 播放 State 执行

本节目标

上节只是把逻辑写好了,为了让游戏看起来更好看,我们需要将敌人的动画也加上去

实现

动画状态机

敌人的状态比较简单,只有站立、加Buff、攻击、受伤、死亡这五种状态

各状态之间的转换关系如下

站立 -> 加 Buff

通过 skill 触发,立刻执行

因为是从 Any State 出来的,所以不需要 Can Transtion To Self

站立 -> 攻击

通过 attack 触发,立刻执行

因为是从 Any State 出发,所以不用勾选 Can Transtion To Self

站立 -> 受伤

通过 hit 触发,立刻执行

因为是从 Any State 出发,所以不用勾选 Can Transtion To Self

站立 -> 死亡

通过 isDead = true 触发,立刻执行

因为是从 Any State 出发,所以不用勾选 Can Transtion To Self

加 Buff -> 站立

完整播放完一次动画后执行

攻击 -> 站立

完整播放完一次动画后执行

受伤到站立

完整播放完一次动画后执行

通过代码播放加 Buff 和攻击动画

如上图所示,当敌人回合开始的时候,会判断一下执行的目标,如果是自己的话就执行 skill,如果是目标的话就执行 attack

这里使用协程来播放动画,原因是敌人动画需要播放到 60% 的时候才能显示实际扣血或者加的buff效果。又学到了一个新的协程等待的办法

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240311_1253

标签:动画,逻辑,38,Self,站立,播放,State,执行
From: https://www.cnblogs.com/hellozjf/p/18065890

相关文章

  • P3878 [TJOI2010] 分金币
    题意有\(n\)枚金币,第\(i\)枚价值为\(s_i\)。分成两部分,使得两部分数量之差不超过\(1\),求价值之差最小是多少。Sol模拟退火!其实这个算法没什么好说的。设当前最优解与当前解的差为\(\DeltaE\)。那么当前状态发生转移的概率为\(P(f(n))=\begin{cases}1,&\text{......
  • 37. 敌人意图 AI 逻辑
    本节目标在玩家回合,需要显示敌人的意图,然后在敌人回合执行意图代码实现拼UI在HealthBar上面添加意图的图片和文字然后在HealthBarController上面添加意图图片和意图文字添加敌人意图敌人意图ScriptableObject敌人意图实例Effect把意图添加到Enemy类......
  • lgP3807 lucas定理计算组合数
    有T次询问,每次给出整数n,m,p,计算C(n+m,n)%p的值。输入保证p为质数。1<=n,m,p<=1E5;1<=T<=10n较大,p较小且为质数时,可以用lucas定理来计算组合数:lucas(n,k,p)=lucas(n/p,k/p,p)*C(n%p,k%p,p)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definer......
  • P3805 【模板】manacher
    https://www.luogu.com.cn/problem/P3805板子题比较模式的代码(书上整理):#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#include<string.h>#include<iomanip>#in......
  • 通达信支撑压力自动画线主图指标公式源码
    {通达信支撑压力自动画线主图指标公式源码}N:=5;STICKLINE(C>O,O,C,3,1),COLORRED;STICKLINE(C>O,H,C,0,0),COLORRED;STICKLINE(C>O,O,L,0,0),COLORRED;STICKLINE(C<o,o,c,3,1),colorff901e;STICKLINE(C<o,h,o,0,0),colorff901e;STICKLINE(C<o,c,l,0,0),colorff901e;......
  • Weekly Contest 387
    ProblemADistributeElementsIntoTwoArraysI思路按照题意模拟即可.代码classSolution{publicint[]resultArray(int[]nums){intn=nums.length;int[]ans=newint[n];int[]arr1=newint[n];int[]arr2=newint[......
  • P10238 [yLCPC2024] F. PANDORA PARADOXXX 题解
    分析考虑时光倒流。对于需要合并的两个连通块\(x,y\),其合并之后的最远点对距离一定是合并之前的两组点对中产生的。在合并的时候枚举点对,取距离最大值即可。由于我们是倒着来的,所有连通块的最远点对距离最大值不减,所以能直接在合并之后取最大值。维护连通块用并查集即可。复杂......
  • 逻辑卷
    linux扩容vg空间******************[root@ymgit01~]#fdisk-l[root@ymgit01~]#fdisk/dev/sdbnpt8epw[root@ymgit01~]#partprobe[root@ymgit01~]#pvcreate/dev/sdcPhysicalvolume"/dev/sdb1"successfullycreated[root@ymgit01~]#vgextendap......
  • 36. 人物动画
    人物动画状态机设置变量isParry 是否在防御isSleep 是否正在睡觉isDead 是否已经死亡attack 攻击hit 受伤skill 技能状态stand 站立parry_stand 防御hurt 受伤attack_pillow 攻击sleep 睡眠wake 醒来skill 技能death 死亡状态切换站立状态可以......
  • CF387B George and Round 题解
    考虑采用双指针法解决此题。首先需要对\(a,b\)数组排序,并且维护两个指针\(l,r\),分别指向\(a,b\)两个数组中的元素。接着循环移动\(r\)指针,每次都尝试匹配\(a_l\)和\(b_r\):若\(a_l\leb_r\),则说明\(a_l=b_r\)或可以采用减少\(b_r\)的方式使\(a_l=b_r\),这......