首页 > 其他分享 >5-2. 滑铲的逻辑和动画的实现

5-2. 滑铲的逻辑和动画的实现

时间:2024-02-26 22:24:56浏览次数:20  
标签:动画 逻辑 协程 PlayerStatBar 实现 Character isSlide 能量

动画

我们需要快速打断滑铲,所以没用结束滑铲

动画状态机中,使用了 isSlide 这个布尔变量

New State -> blueSlide0,需要 isSlide = true,立即进入

blueSlide0 -> blueSilde1,需要 isSlide = true,完整播放一次之后进入

当 isSlide = false 的时候,如果在 blueSlide0 或 blueSlide1,就进入 Exit

输入控制器

按键盘上的 K 或者 手柄上的LB 触发滑铲

代码

监听按键

Slide 函数

当前没有在滑铲,在地面上,有足够的能量,才能进入滑铲状态

滑铲的时候会先确定一个目标点,然后将自己的层变成 Enemy,这样避免滑铲时受到伤害,然后开启一个滑铲的协程,并扣除滑铲需要的能量

TriggerSlide

在这个协程中,会让刚体不断向目标移动,在移动的过程中,如果刚体不在地面上,或者撞墙了(面朝左撞左墙 或者 面朝右撞右墙),都会退出协程

退出协程的时候,isSlide 变为 false,并且角色的层恢复到 Player

Character.OnSlide

滑铲会消耗能量,能量消耗之后,复用之前的扣血代码,OnHealthChange 是个 ScriptableObject,它会唤起监听它的人,也就是 UIManager

UIManager.OnHealthEvent

现在这个方法不但会调整 UI 上的血量,还会调整 UI 上的能量条

PlayerStatBar.OnPowerChange

isRecovering 设置为 true,以便后续 PlayerStatBar 的 Update 可以慢慢恢复能量条

PlayerStatBar.Update

当能量在恢复中的时候,会获取 Character 中当前的能量,算出百分比,当百分比为1之后就不再增多了

数值

PlayerController

Character

项目相关代码

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

标签:20240226_2148

标签:动画,逻辑,协程,PlayerStatBar,实现,Character,isSlide,能量
From: https://www.cnblogs.com/hellozjf/p/18035714

相关文章

  • R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归
    原文链接:http://tecdat.cn/?p=20882 原文出处:拓端数据部落公众号 1导言这篇文章探讨了为什么使用广义相加模型 是一个不错的选择。为此,我们首先需要看一下线性回归,看看为什么在某些情况下它可能不是最佳选择。 2回归模型假设我们有一些带有两个属性Y和X的数据。如果它......
  • 5-1. 滑墙及蹬墙跳的实现
    滑墙的实现方式动画使用滑墙图片制作滑墙动画,只有一帧的动画动画状态机中,增加了onWall这个bool变量,以及blueWallSlide这个状态当onWall==true时,从Jump立即切换到blueWallSlide当onWall==false&&isGround==true时,从blueWallSlide立即切换到blueJump......
  • Qt Virtual Keyboard实现自适应悬浮键盘(多种方法详细记录)
    项目需求实现悬浮键盘,点击QLineEdit或QTextEdit自动弹出自适应悬浮键盘,尝试了以下几种方法后选择了修改QTVirtualKeyboard源码。在这里把其他方法/想法也列出来做一下记录。项目环境:QT5.13.2VS2017方法1:调用windows自带系统软件盘介绍windows自带软键盘分为......
  • pd.ExcelWriter 实现数据写入不同sheet
    pd.ExcelWriter将数据写入不同sheet当结合for循环使用时,需注意放在for循环前面以下写法,仅生成一个sheet,原因在于pd.ExcelWriter的mode默认是w,每次for循环写入数据都会对原有的数据进行覆盖,最终只会生成一个sheet。importpandasaspddf1=pd.DataFrame([["AAA","BBB"]],......
  • Python + Apollo 实现配置中心
    --coding:utf-8--importjsonimportosimportthreadingimporttimefromdatetimeimportdatetime,timedeltafromtypingimportOptionalimportrequestsimportLogConfigasloggingclassApolloClient(object):definit(self,app_id,cluster='defaul......
  • SpringBoot/Java中OCR实现,集成Tess4J实现图片文字识别
    场景TesseractTesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。https://github.com/tesseract-ocr/tesseractTess4JTess4......
  • 简洁高效的实现多个 Enum 自由转换
    一:背景1.讲故事前段时间和同事负责一个项目的两个业务模块,可能大家缺少沟通,导致本该定义一个Enum的地方结果我俩各自定义了一个,导致后面这两个Enum进行对接就烦了,为了方便理解,也不想让大家看这崴脚的英文拼写,我就拿银行举例吧。A同事定义的枚举publicenumBa......
  • GB28181视频监控平台EasyCVR如何通过配置实现级联不响应下级平台的检索消息?
    AI视频智能分析/视频监控管理平台EasyCVR能在复杂的网络环境中(专网、内网、局域网、广域网、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的快捷接入和传输。平台能将接入的视频流进行汇聚、转码与多格式分发,可分发......
  • 面试官:限流的实现方式有哪些?
    限流是指在各种应用场景中,通过技术和策略手段对数据流量、请求频率或资源消耗进行有计划的限制,以避免系统负载过高、性能下降甚至崩溃的情况发生。限流的目标在于维护系统的稳定性和可用性,并确保服务质量。使用限流的好处有以下几个:保护系统稳定性:过多的并发请求可能导致服务......
  • QT多线程实现-----问题解决及实现方式
    一、概述恰巧正在做一个多线程通信的项目,具体功能是与下位机交互和文件发送,在子线程中实现命令发送和文件传输。使用movetothread主要遇到以下几个问题:1.Socketnotifierscannotbeenabledordisabledfromanotherthread。2.子线程完成文件传输,发送信号......