[Godot3.3.3] – 人物死亡动画 part-2

前言

在上一个 part 中已经完成了大部分的逻辑,现在进行一些新的修改。

增加重力

首先将 PlayerDeath 中的 AnimationPlayer 设置为自动播放。

返回 PlayerDeath.gd 并增加一个重力 300,防止玩家的尸体腾空运动。

 
var gravity = 1000

   

_process 函数中更新 y 坐标:

 
extends KinematicBody2D
var velocity = Vector2.ZERO
var gravity = 1000
func _process(delta):
velocity.y += gravity * delta
velocity = move_and_slide(velocity, Vector2.UP) # 第二个参数告诉移动函数地面法向量向上
if (is_on_floor()):
velocity.x = lerp(0, velocity.x, pow(2, -1 * delta)) # 通过线性插值让速度变化更加平滑

   

需要注意的是,这里修改了 pow 中的差值,使之更加平滑了一些,之前的 - 10 有些过于强烈了。

防止玩家重复死亡

到了这里,如果你运行游戏并踩上两个尖刺,你会发现游戏报错了,原因是两个尖刺都会调用玩家 kill() 函数,但是在第一次死亡后玩家已经被删除,这是就会访问空实例。

解决方案如下 (增加一个布尔型判断玩家是否已经死亡,如果已经死亡就直接返回不再调用):

 
var isDying = false
func kill():
if (isDying):
return
isDying = true
var playerDeathInstance = playerDeathScene.instance()
get_parent().add_child_below_node(self, playerDeathInstance)
playerDeathInstance.global_position = global_position
playerDeathInstance.velocity = velocity
emit_signal("died")

   

使相机跟随玩家的尸体

当玩家死后,相机会停留在原地,我们希望相机跟随玩家的尸体一起滑动。

首先将 PlayerDeath 加入 “player_death” 分组,

然后回到 GameCamera 场景进行修改:

 
func acquire_target_position():
var acquire = get_target_position_from_node_group("player")
if (!acquire):
get_target_position_from_node_group("player_death")
func get_target_position_from_node_group(groupName):
var target_group = get_tree().get_nodes_in_group(groupName)
if target_group.size() > 0:
var target = target_group[0]
global_position = target.global_position
# 如果能找到玩家返回设置相机的跟随位置 true,否则返回 false
return true
return false

   

增加了一个可以复用的函数,可以直接返回需要找的目标组是否有孩子,如果有就设置为对应的全局坐标返回真值,如果没有就返回假值。

调用函数,如果找不到玩家组中的玩家结点,就直接去寻找死亡玩家组中的玩家尸体。

然后运行发现如果多次死亡,相机只会停留在死亡玩家组中第一个尸体(因为数组下标为 0 )的位置。

结语

剩余部分将不会放在本一节进行讲解,而是会放在一个单独的 part3 博客中,并且下一 part 将会加入粒子效果来掩盖玩家的死亡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474021.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

短信验证码实现

一、设置AccessKey 创建用户并配置使用权限,使我们拥有调用 aliyunAPI 的权限,之后会生成 AccessKeyID 和 AccessKey密码,后面我们会使用到。需要注意的是 AccessKeyID 和 AccessKey密码生成后我们需要将他保存起来,否则后期无法查…

基于Android Studio订餐管理项目

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 能够实现登录,注册、首页、订餐、购物车,我的。 用户注册后,登陆客户端即可完成订餐、浏览菜谱等功能,点餐,加入购物车,结算,以及删减…

非NI GPIB卡与LabVIEW兼容性分析

在许多测试和测量应用中,通用接口总线(GPIB)是一种广泛使用的标准。尽管国家仪器公司(NI)提供的GPIB硬件和LabVIEW软件的组合被广泛接受和使用,但成本可能较高。因此,一些用户会考虑使用其他厂商…

科研绘图系列:R语言两组数据散点分布图(scatter plot)

介绍 展示两组数据的散点分布图是一种图形化表示方法,用于显示两个变量之间的关系。在散点图中,每个点代表一个数据点,其x坐标对应于第一组数据的值,y坐标对应于第二组数据的值。以下是散点图可以展示的一些结果: 线性关系:如果两组数据之间存在线性关系,散点图将显示出…

基于机器学习(霍特林统计量,高斯混合模型,支持向量机)的工业数据异常检测(MATLAB R2021B)

近年来,隨着集散控制系统、工业物联网、智能仪表等信息技术在现代工业生产系统中的应用,生产过程的运行状态能够以大量数据的形式被感知和记录。基于数据的故障诊断方法以过程数据为基础,采用统计分析、统计学习、信号处理等方法,…

DNS正向解析与反向解析实验

正向解析 安装bind软件 [rootlocalhost ~]# dnf install bind bind-utils -y修改主配置文件/etc/named.conf [rootlocalhost ~]# vim /etc/named.conf重启DNS服务(named) [rootlocalhost ~]# systemctl restart named编辑数据配置文件。在/var/named…

从零开始读RocketMq源码(一)生产者启动

目录 前言 获取源码 总概论 生产者实例 源码 A-01:设置生产者组名称 A-02:生产者服务启动 B-01:初始化状态 B-02:该方法再次对生产者组名称进行校验 B-03:判断是否为默认生产者组名称 B-04: 该方法是为了实例化MQClientInstance对…

Matplotlib Artist Axes

在简介里介绍了很多了,这里补充一点 Axes包含一个属性patch,是Axes对应的方框,可以用来设置Axes的相关属性 ax fig.add_subplot() rect ax.patch # a Rectangle instance rect.set_facecolor(green) Axes有以下方法 Axes helper metho…

MYSQL的简易安装

先下载好安装包 官网:https://www.mysql.com 双击运行进入界面 打开之后将左侧的产品移到右侧 点击使用的产品设置路径 之后一直下一步即可 选择主机类型 同时要记住端口号 设置密码 设置系统服务列表中的服务名称 之后一直下一步就可以了 安装完成记得配置环…

.mkp勒索病毒:深度解析与防范

引言: 在数字化时代,网络安全问题日益严峻,其中勒索病毒作为一种极具破坏性的恶意软件,严重威胁着个人用户和企业机构的数据安全。在众多勒索病毒家族中,.mkp勒索病毒以其强大的加密能力和广泛的传播方式,成…

第二次练习

目录 一、student表的增删改查 1.向student表中添加一条新记录 2. 向student表中添加多条新记录 3.向student表中添加一条新记录 4.更新表,grade 大于90的加0.5 5.删除成绩为空的记录 二、用户权限部分 1、创建一个用户test1使他只能本地登录拥有查询student表的权…

http读书笔记

持久化 HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接(HTTP Persistent Connections, 也称为 HTTP keep-alive 或 HTTP connection reuse) 的方法。 持久连接的特点是, 只要任意一端 没有明确提出断开连接, 则保持 T…

信用卡没逾期就万事大吉了吗?

6月28日,中国人民银行揭晓了《2024年第一季度支付体系概览》,数据显示,截至本季度末,信用卡及借贷合一卡的总量为7.6亿张,与上一季度相比,这一数字微降了0.85个百分点。同时,报告还指出&#xf…

【Unity】unity学习扫盲知识点

1、建议检查下SystemInfo的引用。这个是什么 Unity的SystemInfo类提供了一种获取关于当前硬件和操作系统的信息的方法。这包括设备类型,操作系统,处理器,内存,显卡,支持的Unity特性等。使用SystemInfo类非常简单。它的…

HTML5使用<progress>进度条、<meter>刻度条

1、<progress>进度条 定义进度信息使用的是 progress 标签。它表示一个任务的完成进度&#xff0c;这个进度可以是不确定的&#xff0c;只是表示进度正在进行&#xff0c;但是不清楚还有多少工作量没有完成&#xff0c;也可以用0到某个最大数字&#xff08;如&#xff1…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

C++11|包装器

目录 引入 一、function包装器 1.1包装器使用 1.2包装器解决类型复杂 二、bind包装器 引入 在我们学过的回调中&#xff0c;函数指针&#xff0c;仿函数&#xff0c;lambda都可以完成&#xff0c;但他们都有一个缺点&#xff0c;就是类型的推导复杂性&#xff0c;从而会…

aardio —— 今日减bug

打字就减bug 鼠标双击也减bug 看看有多少bug够你减的 使用方法&#xff1a; 1、将资源附件解压缩&#xff0c;里面的文件夹&#xff0c;放到aardio\plugin\plugins 目录 2、aardio 启动插件 → 插件设置 → 选中“今日减bug” → 保存。 3、重启 aardio&#xff0c;等aa…

解决IDEA每次新建项目都需要重新配置maven的问题

每次打开IDEA都要重新配置maven&#xff0c;这是因为在DEA中分为项目设置和全局设置&#xff0c;这个时候我们就需要去到全局中设置maven了。我用的是IntelliJ IDEA 2023.3.4 (Ultimate Edition)&#xff0c;以此为例。 第一步&#xff1a;打开一个空的IDEA&#xff0c;选择左…

起飞,纯本地实时语音转文字!

简介 偶然在 github 上翻到了这个项目 https://github.com/k2-fsa/sherpa-ncnn 在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持 iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 也就是说语音转文字可以不再借助网络服务的接口&am…