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

Godot ------ 初级人物血条制作01

Godot ------ 初级人物血条制作

  • 引言
  • 正文

引言

在游戏开发中,尤其是 Roguelike 类型的游戏中,人物的血条往往非常重要,本文我们将简单介绍如何使用 Godot 来制作人物血条。

正文

在场景界面中选择添加其他节点。
在这里插入图片描述
在弹出的窗口中选中 ProgressBar 并点击创建。
在这里插入图片描述
创建完成后回到场景窗口,我们将场景名称从默认的 ProgressBar 改为 BloodStrip。
在这里插入图片描述
此时,我们在 2D 显示窗口看到的是一个非常窄的对象,这是因为我们创建的 BloodStrip 对象使用的是默认的尺寸。
在这里插入图片描述
接下来,我们需要在检查器窗口中的 Control 标签页下选择 Layout->Transform,在展开的下拉窗口下更改 Size 值,比如,这里我们将 x 值更改为 100,将 y 值更改为 30。此时,如下图所示,可以看到,对应的窗口尺寸改变了。
在这里插入图片描述
下一步,我们想要为我们的血条添加背景颜色以及前景色,此时,我们可以通过检查器窗口下的 Control 标签页下的 Theme overrides->styles->Background 中选择 StyleBoxFlat。
在这里插入图片描述
然后在 BG Color 中选择想要使用的背景色。这里为了增加对比度,我们将其选择为纯黑色(RGB 值为 (0, 0, 0))。因为血条通常的边框是带有一定弯曲,我们可以在 Theme overrides->styles->Background->Corner Radius 中将 Top Left, Top Right, Bottom Right, Bottom Left 设置为 8 px。同时,我们也可以将血条的边框进行突出,可以将 Theme overrides->styles->Background->Border Width 选项下的 Left, Top, Right, Bottom 设置为 2 px。此时,2D 显示窗口中血条图像变为:
在这里插入图片描述
接着,我们需要将 Theme overrides->styles-> Fill 也设置为 StyleBoxFlat。然后将颜色设置为红色,RGB 值为 (255, 0, 0)。
在这里插入图片描述
设置完成后,我们回到 2D 显示窗口查看,结果与设置前一样。如下图所示。
在这里插入图片描述
这是因为此时,我们设置的是填充颜色,而此时,默认的填充值为 0,也就是说此时人物的血量为 0,当然不会有任何填充显示。为了能够正常显示我们设置的颜色,我们需要在检查器窗口下的 Range 标签页中设置 Min Value, Max Value,Step 以及 Value 值。通常人物的血条有两种设置方式,如下:

# 方式 1
Min Value = 0.0
Max Value = 100.0
Step = 1.0
Value = 可以为任意值(血条显示的当前值)# 方式 2
Min Value = 0.0
Max Value = 1.0
Step = 0.01
Value = 任意值(血条显示的当前值)

设置完成后我们可以看到 2D 显示结果如下:
在这里插入图片描述
显然,显示和我们的预期不太一致,这是因为,我们没有在 Theme overrides->styles->Fill 下设置 Border Width 以及 Corner Radius,我们需要对这些设置进行设置,使得它们与 Theme overrides->styles->Background 下的设置保持一致。设置完成后 2D 显示界面中的效果如下:
在这里插入图片描述
此时,左侧部分显示正常,但是右侧部分由于有边框的存在,显示是异常的,这是因为边框的颜色与血条的背景色不一致造成的,解决这一问题,最简单的方法就是将边框颜色设置为与血条背景色一致,比如,这里我们可以将边框的颜色设置为黑色。
在这里插入图片描述
当然我们也可以更改背景色使其与 Border 颜色一致。
在这里插入图片描述
至此,我们完成了血条的创建。

然而在实际的游戏中:

  1. 血条的值肯定是动态变化的。
  2. 通常血条的初始值应该是 100%,而且血量的显示应该是一个实际的数字而不是百分比。
  3. 在某些情况下,血条需要继承之前的状态,从而其初始数值也不一定是满的。

因此,接下来我们要做的就是使用 GDScript 来实现这两个功能。在下一篇文章中我们会集中介绍如何使用脚本来实现这一设计。

如果大家觉得有用,就请点个赞吧~

http://www.lryc.cn/news/611541.html

相关文章:

  • OpenAI开源大模型gpt-oss系列深度解析:从120B生产级到20B桌面级应用指南
  • Unity3D中的Controller:深入解析动画控制器的核心概念与应用
  • 【数据库】Oracle学习笔记整理之一:ORACLE的核心组成部分
  • 【YOLOv8改进 - C2f融合】C2f融合DBlock(Decoder Block):解码器块,去模糊和提升图像清晰度
  • 微信小程序最大层级跳转问题
  • [Oracle] SIGN()函数
  • RabbitMQ 全面指南:从基础概念到高级特性实现
  • Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型
  • 外观模式(Facade Pattern)及其应用场景
  • Leetcode-3488距离最小相等元素查询
  • 系统的缓存(buff/cache)是如何影响系统性能的?
  • 第五十篇:AI画家的“神经中枢”:ComfyUI的推理路径与缓存逻辑深度解析
  • 【Web安全】csrf、ssrf和xxe的区别
  • Python实现电商商品数据可视化分析系统开发实践
  • Qt 中实现多线程的两种方式及结合
  • Pytest项目_day05(requests加入headers)
  • 8.6 JavaWeb(请求响应 P67-P74)
  • 部署Web UI自动化测试平台:SeleniumFlaskTester
  • UI测试平台TestComplete的AI视觉引擎技术解析
  • QT+opencv+yolov8推理
  • 移动端跨平台框架(支持Harmony、iOS、Android)
  • C语言:指针(1-2)
  • Kaggle 经典竞赛泰坦尼克号:超级无敌爆炸详细基础逐行讲解Pytorch实现代码,看完保证你也会!!!
  • 霍尔传感器
  • 碰撞问题的分析
  • 什么是CDN, 它为什么更快
  • 《算法导论》第 7 章 - 快速排序
  • 概率/期望 DP Jon and Orbs
  • 机器学习④【算法详解:从决策树到随机森林】
  • 一周学会Matplotlib3 Python 数据可视化-图形的组成部分