【Godot4自学手册】第十九节敌人的血量显示及掉血特效

这一节,我主要学习敌人的血量显示、掉血显示和死亡效果。敌人的血量显示和主人公的血量显示有所不同,主要是在敌人头顶有个红色的血条,受到攻击敌人的血条会减少,并且有掉血数量的文字显示,效果如下:
请添加图片描述

一、创建敌人的血条

1.节点布局

新建Node场景命名为HealthBar,给HealthBar添加3个子节点,一是TextureProgressBar命名为HbarTxp,二是Label命名为ShowLb,三是AnimationPlayer命名为AnimaP。整个场景节点情况如下:
请添加图片描述

保存场景到Scenes文件夹下。

2.设置血条

选择HbarTxp节点, 在其检查器中Textures->Progress选择新建AtlasTexture(纹理图集),然后单击该图集在其属性面板中,将我们做好的血量图片拖拽到Atlas下,操作图如下:
请添加图片描述

下一步单击Region->编辑区域按钮,在弹出的区域编辑器中,吸附模式选择自动裁剪,然后单击红色血条,然后选择关闭。操作过程如下:
请添加图片描述

同理,设置Textures->Over,操作过程类似,只不过背景图片选择血条背景图片框,选择的图片如下:
请添加图片描述

HbarTxp检查器中将Textures->Progess Offset设置为(1,1),如下:
请添加图片描述

最后,在HbarTxp检查器中将Radial Fill->Max Value 设置为1,Step设置为0,Value设置为0,5,参数如下:
请添加图片描述

在编辑器中调整HealthBar居中,最后效果如下:
请添加图片描述

3.设置文本显示

选择ShowLb结点,在其检查器中将Text属性随便输入一个数字10。Theme Overrides->Colors->Font Color选择红色,如下:
请添加图片描述

在编辑器中调整ShowLb到血量条的正上方,最后效果如下:
请添加图片描述

4.设置文字动画

选择AnimaP节点,在其动画面板中“动画”按钮下拉菜单中选择新建动画。
请添加图片描述

新动画名称设置为Hurt。
请添加图片描述

动画时长设置为0.6,将播放头放到第1帧,选择ShowLb,在其检查器中Layout->Transform->Position后面的关键帧按钮将此关键帧添加到动画第一帧。
请添加图片描述

将播放头放到第4帧,向上调整ShowLb到合适位置,同理将该位置添加到第4关键帧。
将播放头放到第1帧,选择ShowLb,在其检查器中Theme Overrides->Colors->Font Color后面的关键帧按钮将此关键帧添加到动画第一帧。
请添加图片描述

同样设置第3帧。将播放头放到第7帧(动画最后),选择ShowLb,在其检查器中Theme Overrides->Colors->Font Color,将透明度设置为0,如下:
请添加图片描述

设置完成后单击后方的动画关键帧将透明度为0添加到动画末尾,最后动画面板中Hurt动画设置如下:
请添加图片描述

最终的动画效果如下:
请添加图片描述

5.编写脚本代码

给跟节点添加添加脚本,命名为health_bar,保存到Scripts文件夹下。并编写如下代码:

extends Node2D
@export var stats:Stats  #定义状态继承自Stats
@onready var hbar_txp = $HbarTxp
@onready var show_lb = $ShowLb
@onready var anima_p = $AnimaPvar oldhealth# Called when the node enters the scene tree for the first time.
func _ready():show_lb.visible=false #血量变化文字隐藏显示oldhealth = stats.health  #记录上次血量stats.health_changed.connect(update_health)  #血量变化信号连接到血量更新UIupdate_health()# Called every frame. 'delta' is the elapsed time since the previous frame.
func update_health():var percentage :=stats.health/ float(stats.max_health)  #计算血量百分比hbar_txp.value = percentage  #将百分比赋给进度条var healthcharge = stats.health-oldhealth #计算血量编号if(healthcharge!=0):		show_lb.text=str(healthcharge) #血量变化复制给lableshow_lb.visible=true  #显示血量变化数字anima_p.play("Hurt") #播放血量位置隐藏动画oldhealth=stats.health  #记录目前血量pass

二、给敌人添加血量

切换到Enemy场景,选择根节点,第一是单击添加子节点按钮,在创建Node结点对话框选择Stats,这个类是我们自定义的状态类,单击创建。
请添加图片描述

第二是单击实例化子场景按钮,在弹出的实例化子场景对话中选择,我们刚才新建的health_bar.tsc场景,然后单击打开按钮,将health_bar实例化到Enemy场景。
请添加图片描述

选中HealthBar结点,然后在其检查器中Stats属性上单击,在弹出对话框中stats,单击确定,这样stats状态就和HealthBar链接起来了。
请添加图片描述

三、编写代码

切换到Enemy代码,编写代码。首先获取状态结点,代码如下:

@onready var stats = $Stats

然后修改hurt_state受伤代码:

stats.health -=10  #受伤一次减去10点血量var dir = hurtdirecion.direction_to(global_position).normalized()if abs(dir.x)>abs(dir.y):if dir.x<0:velocity.x =-knockbackelse :velocity.x =knockbackelse:if dir.y<0:velocity.y =-knockbackelse :velocity.y =knockbackanima_p.play("TakeHit")await  anima_p.animation_finished	if stats.health<=0:#血量小于等于零时,敌人进入死亡状态state=DEATHelse:velocity = Vector2.ZEROstate=CHASE

这样,敌人就有血量显示了。今天就到这了,下节再见!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的医院后台管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

SMBGhost漏洞技术分析与防御方案

事件分析 最近国内外各安全厂商都发布了SMBGhost(CVE-2020-0796)漏洞的预警报告和分析报告&#xff0c;笔者利用周末休息时间也研究了一下&#xff0c;就算是做一个笔记了&#xff0c;分享给大家一起学习下&#xff0c;目前外面研究的POC大部分是通过SMB压缩数据包长度整数溢出…

如何根据玩家数量和游戏需求选择最合适的服务器配置?

根据玩家数量和游戏需求选择最合适的服务器配置&#xff0c;首先需要考虑游戏的类型、玩家数量、预计的在线时间以及对内存和CPU性能的需求综合考虑。对于大型多人在线游戏&#xff0c;如MMORPG或MOBA等&#xff0c;由于需要更多的CPU核心数来支持更复杂的游戏逻辑和处理大量数…

操作系统|概述|系统分类——笔记

1.1_1操作系统的概念和功能 操作系统的概念 操作系统&#xff08;Operating System&#xff0c; OS&#xff09; 是指控制和管理整个计算机系统的 硬件和软件 资源&#xff0c;并合理地组织调度计算机和工作和资源的分配&#xff1b; 1操作系统是系统资源的管理者 以提供给用…

文件的顺序读写函数举例介绍

目录 例1&#xff1a;&#xff08;使用字符输出函数fputc&#xff09;例2&#xff1a;&#xff08;使用字符输入函数fgetc&#xff09;例3&#xff1a;&#xff08;使用文本行输出函数fputs &#xff09;例4&#xff1a;&#xff08;使用文本行输入函数fgets &#xff09;例5&a…

Docker基础教程 - 2 Docker安装

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 2 Docker安装 Docker 的官网地址&#xff1a;https://www.docker.com/&#xff0c;在官网可以找到 Docker Engine 的安装步骤。 下面进行 Docker 环境的安装&#xff0c;正常情况下 Docker …

服务发现:CP or AP?

1 服务发现的意义 为高可用&#xff0c;生产环境中服务提供方都以集群对外提供服务&#xff0c;集群里这些IP随时可能变化&#xff0c;也需要用一本“通信录”及时获取对应服务节点&#xff0c;这获取过程即“服务发现”。 对服务调用方和服务提供方&#xff0c;其契约就是接…

(3)(3.1) FlightDeck FrSky发射器应用程序

文章目录 前言 1 概述 2 Turnkey Packages 3 参数说明 前言 ​Craft and Theory 的 FlightDeck 可让你轻松查看飞行模式、高度、速度、姿态和关键系统警报&#xff0c;包括故障保护和电池错误&#xff0c;如电池不平衡警告和发射机低电量警报。 1 概述 Craft and Theory 的…

【自然语言处理】NLP入门(二):1、正则表达式与Python中的实现(2):字符串格式化输出(%、format()、f-string)

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出3.1 %符号格式化字符串1. 一般形式2. 常用格式字符3. 最小宽度和精度4. 进位制和科学计数法5. 多个对象的格式化输出6. 典例 3.2 format()方法格式化字符串1. 一般形式2. 参数传递…

51单片机-(中断系统)

51单片机-&#xff08;中断系统&#xff09; 了解51单片机中断系统、中断源、中断响应条件和优先级等&#xff0c;通过外部中断0实现按键控制LED亮灭为例理解中断工作原理和编程实现过程。 1.中断系统结构 89C51/52的中断系统有5个中断源 &#xff0c;2个优先级&#xff0c;…

WiFi模块引领智能家居革命:连接未来的生活

随着科技的快速发展&#xff0c;智能家居正成为现代生活的一部分&#xff0c;极大地改变了我们与家庭环境互动的方式。其中&#xff0c;WiFi模块作为关键的连接技术&#xff0c;在推动智能家居革命中发挥着不可忽视的作用。本文将深入探讨WiFi模块如何驱动智能家居革命。 设备互…

【探索Linux】—— 强大的命令行工具 P.24(网络基础)

阅读导航 引言一、计算机网络背景1. 网络发展历史 二、认识 "协议"1. 网络协议概念2. 网络协议初识&#xff08;1&#xff09;协议分层&#xff08;2&#xff09;OSI参考模型&#xff08;Open Systems Interconnection Reference Model&#xff09;&#xff08;3&…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先&#xff0c;导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作&#xff1a; 1.1.2.1 点击开启虚拟机&#xff1a; 1.1.2.2 默认选择回车CentOS Linux&#xff08;3.10.0-1127.e17.x86_64) 7 …

MCU 串口接收环形缓冲区的实现

环形缓冲区 1. 环形缓冲区的特性 1.先进先出 2. 当缓冲区被使用完&#xff0c;且又有新的数据需要存储时&#xff0c;丢掉历史最久的数据&#xff0c;保存最新的数据 现实中的存储介质都是线性的&#xff0c;因此我们需要做一下处理&#xff0c;才能在功能上实现环形缓冲区 …

[计算机网络]--I/O多路转接之poll和epoll

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、poll函…

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…

stm32学习笔记:IIC通信(未完)

概述 第一块&#xff1a;介绍协议规则&#xff0c;然后用软件模拟的形式来实现协议。 第二块&#xff1a;介绍STM32的iic外设&#xff0c;然后用硬件来实现协议。 程序一现象&#xff1a;通过软件I2C通信&#xff0c;对MPU6050芯片内部的寄存器进行读写&#xff0c;写入到配…

【Synchronized同步原理】

Synchronized同步原理 1. synchronized的使用&#xff1f;2. 如何保证线程安全的&#xff1f;3.可重入原理&#xff08;加锁次数计数器&#xff09;4. 原子性和可见性(顺序性) 1. synchronized的使用&#xff1f; 对象锁方法锁类锁 2. 如何保证线程安全的&#xff1f; publi…

关于数据提交上传服务端的数据类型以及项目打包上线的流程

1 请求头的类型&#xff1a; content-type&#xff1b; 01: application/json 数据以json格式请求&#xff1a;{"key":"value"} 02: application/x-www.form-urlencoded from表单的数据格式 name"zs"&age12 03 mutipart/form-data…

重学SpringBoot3-自动配置机制

重学SpringBoot3-自动配置机制 引言Spring Boot 自动配置原理示例&#xff1a;Spring Boot Web 自动配置深入理解总结相关阅读 引言 Spring Boot 的自动配置是其最强大的特性之一&#xff0c;它允许开发者通过最少的配置实现应用程序的快速开发和部署。这一切都得益于 Spring …