当前位置: 首页 > news >正文

[godot] 采用状态机时,如何处理攻击时移动?如“冲撞”

这里以‘史莱姆撞击’为例子,将‘空中跃进’定义为伤害帧。(见下图)

先梳理流程:a.史莱姆原地蓄力(起跳准备)--->b.跳起并移动一段距离(空中跃进)--->c.落地调整

    当状态机进入‘攻击状态’时,在enter()中设置起跳速度,并播放‘a动画’。a动画播放期间,do()函数什么也不做。

   a动画结束后,do()函数中开始执行move_and_slide()。

b动画不要用play()播放,而是手动控制动画帧:

                在上升过程中,设置动画为“空中跃进-第1帧”

                在下降过程中,设置动画为“空中跃进-第2帧”

    当史莱姆落回地板时(is_on_floor),播放c动画,不再执行move_and_slide()。

c动画结束后,退出攻击状态,转到移动/待机状态

#== gdScript
#== 攻击状态
var is_jump = 0 # 是否处于空中跳跃阶段
var to_end = 0 # 是否处于落地调整阶段
func enter():print("进入攻击状态")# 设置起跳速度chara.velocity.x = $"../Run".direct.x*40chara.velocity.y=-300$"../../AnimatedSprite2D".play("攻击准备")
func do():# 空中移动过程if is_jump==1:chara.velocity.y+=chara.gravity*0.01chara.move_and_slide()## 可以在这里判断是否触碰到玩家并造成伤害# 空中移动动画if chara.velocity.y>=0&&to_end==0:$"../../AnimatedSprite2D".frame=1 # 下降期间动画# 落地if chara.is_on_floor()&&to_end==0&&is_jump==1:is_jump=0 # 不再移动位置to_end=1 # 该if块只执行一次$"../../AnimatedSprite2D".play("攻击结束")	func exit():to_end=0 # 记得重置变量func _on_animated_sprite_2d_animation_finished():# 若开启了"动画循环",则不会触发finished信号if $"../../AnimatedSprite2D".animation=="攻击准备": is_jump=1 # 开始移动$"../../AnimatedSprite2D".animation="攻击过程"$"../../AnimatedSprite2D".frame=0 # 上升期间动画if $"../../AnimatedSprite2D".animation=="攻击结束":get_parent().change_state($"../Run") # 转移到移动状态

关键是对攻击进一步细分

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【R语言】基于多模型的变量重要性图 (Variable Importance Plots)
  • 开学季数码好物分享!推荐适合学生党好用又实惠的平替电容笔!
  • 叉车驾驶员状态监控系统,司机身份安全识别,强化监管能力建设!
  • pyqt 用lamada关联信号 传递参数 循环
  • 富格林金业:注意避免曝光交易黑幕
  • python深度学习框架——TensorFlow
  • 企业如何通过费用专项分析节约成本?BI大神带你实操数据分析过程!
  • 【MySQL】MySQL学习笔记(持续更新)
  • Linux搭建环境:从零开始掌握基础操作(三)
  • Python之列表解析和用matplotlib模块绘制图形
  • LeetCode面试题Day15|LC219 存在重复元素Ⅱ、LC229 汇总区间
  • 高考杂志社《高考》杂志社高考杂志社编辑部2024年第22期目录
  • 客车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型
  • 微服务事务管理
  • Qt5.14.2 多边形与多边形求交集
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [译]Python中的类属性与实例属性的区别
  • 【EOS】Cleos基础
  • CSS3 变换
  • Java编程基础24——递归练习
  • JS数组方法汇总
  • Netty源码解析1-Buffer
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Redis在Web项目中的应用与实践
  • Spring声明式事务管理之一:五大属性分析
  • Twitter赢在开放,三年创造奇迹
  • vue2.0项目引入element-ui
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 我这样减少了26.5M Java内存!
  • 想写好前端,先练好内功
  • 小李飞刀:SQL题目刷起来!
  • 用jquery写贪吃蛇
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)基于IDEA的JAVA基础12
  • (转)JAVA中的堆栈
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)深入super,看Python如何解决钻石继承难题
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./和../以及/和~之间的区别
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net的socket示例
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET是什么
  • .net下的富文本编辑器FCKeditor的配置方法
  • @EnableWebSecurity 注解的用途及适用场景