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

news2024/11/15 17:19:45

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

一、创建敌人的血条

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 = $AnimaP

var 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)  #血量变化信号连接到血量更新UI
	update_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) #血量变化复制给lable
		show_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 =-knockback
		else :
			velocity.x =knockback
	else:
		if dir.y<0:
			velocity.y =-knockback
		else :
			velocity.y =knockback
	anima_p.play("TakeHit")
	await  anima_p.animation_finished	
	if stats.health<=0:#血量小于等于零时,敌人进入死亡状态
		state=DEATH
	else:
		velocity = Vector2.ZERO
		state=CHASE

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

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

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

相关文章

详解动态规划(算法村第十九关青铜挑战)

不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finis…

QT Mingw32/64编译ffmpeg源码生成32/64bit库以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg测试 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频…

【leetcode】用队列实现栈

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: 在做此题之前&#xff0c;我们先要实现队列&#xff0c;这在上个博客中已经写过&#…

算法43:动态规划专练(最长回文子串 力扣5题)---范围模型

之前写过一篇最长回文子序列的博客算法27&#xff1a;最长回文子序列长度&#xff08;力扣516题&#xff09;——样本模型 范围模型-CSDN博客 在那一篇博客中&#xff0c;回文是可以删除某些字符串组成的。比如&#xff1a; 字符串为&#xff1a;a1b3c4fdcdba&#xff0c; 那…

赵文彬将出席无磷锅炉工艺助剂在锅炉水节水节能应用

演讲嘉宾&#xff1a;赵文彬 集团副总/技术总监 上远未来水务集团有限公司 演讲题目&#xff1a;无磷锅炉工艺助剂在锅炉水节水节能方面的应用 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&am…

c++之旅——第四弹

大家好啊&#xff0c;这里是c之旅第三弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 本篇文章的主…

一些C语言题目

求10个整数中最大值 #include <stdio.h>//求10个整数中最大值 int main() {int arr[10]{2,5,8,6,19,1,7,3,11,3};int i 0;int max 0;/*for(i 0;i < 10;i){scanf("%d",&arr[i]);}*/for(i 0;i < 10;i){if(arr[i] > max)max arr[i];}printf(&q…

tomcat 反向代理 自建博客 修改状态页 等

一 自建博客 随后&#xff0c;拷贝到webapps下面 并且做软连接 随后重定向 并且下载 cat >/etc/yum.repos.d/mysql.repo <<EOF [mysql57-community] nameMySQL 5.7 Community Server baseurlhttp://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ enabled1 g…

分享一款我自己开发的自动更新小工具

我们公司最近需要开发一款自动上传的工具&#xff0c;这个工具需要安装在用户电脑上&#xff0c;但是这样不利于维护&#xff0c;于是想到了自动更新这个功能&#xff0c;需要在打开工具时顺带打开自动更新的小工具&#xff0c;这样我们在更新代码后&#xff0c;用户那边就能自…

IDEA POM文件配置profile实现不同环境切换

目录 一、背景 二、实现 2.1创建不同的配置文件 2.2配置POM文件 三、效果 3.1本地使用 2.2线上或者测试环境使用 一、背景 在企业级开发中&#xff0c;为了不影响生产环境的项目运行&#xff0c;一般情况下都会划分生产环境、测试环境、开发环境。不同环境可以配置不同的…

4. 编写app组件

1. 代码 main.ts // 引入createApp用于创建应用 import {createApp} from "vue"// 引入App根组件 import App from ./App.vue createApp(App).mount(#app) App.vue <!-- vue文件可以写三种标签1. template标签&#xff0c;写html结构2. script 脚本标签&…

Linux设备模型(十) - bus/device/device_driver/class

四&#xff0c;驱动的注册 1&#xff0c;struct device_driver结构体 /** * struct device_driver - The basic device driver structure * name: Name of the device driver. * bus: The bus which the device of this driver belongs to. * owner: The module own…

js 面试 什么是WebSockets?HTTP和HTTPS有什么不同?web worker是什么?

概念&#xff1a; webSocket 是一种在客户端和服务端之间建立持久连接的协议&#xff0c;它提供全双工通信通道&#xff0c;是服务器可以主动向客户端推送数据&#xff0c;同时也可以接受客户端发送的数据。 1 webSocket与https区别&#xff1f; 在网络通信中&#xff0c;We…

一款汇聚 精美UI+AI内容生成助手 的实用白板工具

大家好&#xff0c;我是Mandy。今天给大家分享的内容是&#xff0c;如何利用AI快速生成思维导图、PPT、绘画等功能&#xff0c;本文分享的AI功能是基于boardmix实现。 boardmix是一款非常精美的在线白板工具&#xff0c;是一个实时协作的智慧白板上、一键生成PPT、用AI协助创作…

YOLOv9保姆教程,手把手教你训练、检测,快来学习吧!!

首先在这里推送一下我的YOLOv9改进专栏&#xff0c;目前是全网最快的YOLOv9改进专栏&#xff0c;该专栏将更新最新的模块来改进YOLOv9&#xff0c;助力大家论文与科研&#xff0c;欢迎大家了解&#xff01; ⭐专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&…

Python+Selenium4 Web自动化测试框架学习(一)

主要框架及技术 1.第一个selenium例子 import timefrom selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome() driver.get("https://www.bilibili.com") driver.find_element(By.CLASS_NAME,"nav-search-input&…

求阶乘。。

&#xff01;&#xff01;&#xff01;答案解释摘录自蓝桥云课题解 问题描述 满足N!的末尾恰好有个0的最小的N是多少? 如果这样的N不存在输出-1。 输入格式 一个整数 K 输出格式 一个整数代表答案 样例输入 2 样例输出 10 import os import sys# 请在此输入您的代码 def coun…

css通过calc动态计算宽度

max-width: calc(100% - 40px) .m-mj-status-drawing-info-data{ display: inline-block; margin: 10px; min-width: 200px; padding: 10px;border-radius: 10px; background: #ddd;max-width: calc(100% - 40px);word-wrap: break-word;white-space: pre-line;}我开发的chatg…

从第一原理看大语言模型

大模型基础框架 大模型幻觉问题 大模型能力 思维链模式 思维链模式激发的是大模型的推理能力 LLM知识能力RAG

【java-面试题】链表刷题

【java-面试题】链表刷题 1. 删除链表中等于给定值 val 的所有节点&#xff08;最多遍历链表一遍&#xff09;题目思路代码 2. 反转一个单链表&#xff08;就地反转&#xff09; 1. 删除链表中等于给定值 val 的所有节点&#xff08;最多遍历链表一遍&#xff09; 力扣链接&am…