【Godot 3.5控件】用TextureProgress制作血条

说明

本文写自2022年11月13日-14日,内容基于Godot3.5。后续可能会进行向4.2版本的转化。

概述

之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat,好处是它几乎可以算是矢量的,体积小,所有东西都是样式信息,没有图片什么事儿。

在这里插入图片描述

但是就像之前说过的,它太过局限,无法实现复杂的需求。

使用TextureProgress制作复杂血条

TextureProgress的好处是它是基于图片的,通过创建三张图片,你就可以做出一个血条。

在这里插入图片描述

  • under(下面):提供背景
  • progress(进度):提供进度条自身的图片
  • over(上面):提供边框

以上面示意图所显示的为例,其实我们需要创建如下图左的三张图片,三者结合,组成一个血条的样子(图右):

在这里插入图片描述

上面的血条如果想一格一格显示,那么可以如下设置:max=8min=0,step=1,这样就不会出现半格的现象了。

但是实际中无论是星际还是相似的游戏,采用这种血条的都不是标准的一格一格的掉血。
image.png
甚至有变体是每一个格子像是一格单独的血条,会根据血量变颜色,而其他格子的血条颜色不变。

关于圆角

两侧的带圆角或一侧带圆角都是没有问题的。只要是三者的尺寸相一致就可以。你可以给progress做一些高光之类的修饰。
带圆角的血条素材
但是Godot的TextureProgress存在的问题是,它的切面只能是规整的。
TextureProgress只能给予直线切面

关于异形

TextureProgress做异形的血条也是没问题的。但是有点漏色,只可远观。
异形血条的效果
TextureProgressProgressBar以及Slider控件都集成自Range类型,Range提供了minmaxstepvalue,实现一个范围内的值改变。

image.png
image.png
可以看到,其实,TextureProgress实现的主要是通过range来按比例(value/max)裁切和显示progress所提供的图片。

圆形

除了长条形,也可以用圆形制作一些特殊效果的进度条。

圆形素材
以下是在圆形图片素材时,通过设置不同的fill_mode可以或得的效果:

  • FILL_LEFT_TO_RIGHT (自左向右)【默认】

image.png

  • FILL_RIGHT_TO_LEFT(自右向左)

image.png

  • FILL_TOP_TO_BOTTOM(自上向下)

image.png

  • FILL_BOTTOM_TO_TOP(自下而上)

image.png

  • FILL_CLOCKWISE(径向,顺时针)

image.png

  • FILL_COUNTER_CLOCKWISE(径向,逆时针)

image.png - FILL_BILINEAR_LEFT_AND_RIGHT(由中间往两侧)

image.png - FILL_BILINEAR_TOP_AND_BOTTOM(由中间向上下)

image.png - FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE(径向,同时向顺时针和逆时针)

image.png

圆形美化的例子

加了一些剪切蒙版。
在这里插入图片描述

说实话暗色的那个图片素材是多余的,应该用颜色调制实现。

圆环

其实看到圆形部分的例子,几乎就能想到圆环的做法了,当然还是去看了一下Hi小胡的圆环进度条实例,跟我能想到的差不多,而且他做的真的很不错,用了自带的色彩调制以及径向模式下的偏移,还做了动画。
我们先抛开Hi小胡的思路,而是看我们自己首先会想到如何实现圆环。
最简单的就是只有一个progress,而且它本身就是我们想要的色彩,这样我们就获得了一个么有背景的圆环。
在这里插入图片描述

进阶一下的话可以设定一个背景:
在这里插入图片描述

再进一步加个边线:
在这里插入图片描述

当然还有一个组合就是值有progressover没有under

好了再说回Hi小胡是怎么做的,以及巧妙之处。

他只在PS里画了一个圆环,但是颜色设为了纯白色,然后在Godot中将progressunder都设为了这个白色的圆环图案。
在这里插入图片描述

接下来骚操作来了,给tint分组下的tint_undertint_progress各设定一个颜色。

image.png
然后设定一个不是max的中间值value,圆环的效果就出来了。

image.png
这到底是为什么呢?

属性值类型默认值描述
tint_underColorColor(1,1,1,1)将设定的颜色与TextureProgress的texture_under纹理的颜色相乘
tint_overColorColor(1,1,1,1)将设定的颜色与TextureProgress的texture_over纹理的颜色相乘
tint_progressColorColor(1,1,1,1)将设定的颜色与TextureProgress的texture_progress纹理的颜色相乘

颜色相乘,虽然没有学过,但是将RGBA色彩当做是有四个分量的向量,那么就明白了。

Color(1,1,1,1)就是纯白色,完全不透明,它乘以任何颜色值就等于这个颜色值本身。所以Hi小胡使用纯白色绘制圆环的妙处就在此。用一个白色圆环,经过调色,就可以获得完全不同的颜色,甚至是可编程的。

image.png
学到“白色”的妙处之后,我们可以举一反三,制作素材的时候就可以省下至少一张图片了,因为under和progress都可以用白色进行调制。

举一反三:根据剩余血量变化血条颜色

在这里插入图片描述

根据剩余血量改变血条颜色是一个非常常见的设计策略,通过“白色”的妙用,我们完全可以100%的实现这一设计,代码也就是几行if的问题。

径向的初始角度和最大填充角度

image.png
radial_initial_angle类似于给默认的起始点也就是0度位置进行了一个角度的偏移,默认起始角度0°相当于表盘上的十二点钟方向,同时默认最大填充角度radial_fill_degrees为360°,相当于转一圈后回到了0°。
在这里插入图片描述

radial_fill_degrees如果设为360以外的数值,就代表一圈不再是360度,而是其他数值。
在这里插入图片描述

radial_center_offset就按字面意思就是对圆或圆环的圆心进行一定二维向量的平面偏移。

更好看的样式

下面是一些参考图,可以自己试着实现一下,应该都是类似的思路。
在这里插入图片描述
在这里插入图片描述

矩形和圆角矩形

在技能按钮组件制作时,借用了Hi小胡的想法,就是使用“矩形 +径向,逆时针“,有些游戏里也会存在使用“矩形+上到下/下到上”的组合,比如植物大战僵尸植物的卡牌就是“矩形+自下而上“。
在这里插入图片描述

技能按钮的:矩形 +径向,逆时针(图左),植物大战僵尸植物卡牌的:矩形+自下而上
所以知识不就串起来了嘛~

ProgressBarTextureProgress,不仅仅是制作一些加载进度和血条,任何带过程的东西都可以用它们来制作和表示。
发挥你的想象力吧。

参考Hi小胡的这个例子:
【Godot】实现三种角色血量显示方式_哔哩哔哩_bilibili
image.png
因为TextureProgress对process的图片是采取裁切形式,所以我们只需要将max值设为代表学血量的心的2倍,步幅(step)为1,最小值min为0,就可以实现如下的效果:
min=0,max=10时value所对应的血量情况

min=0,max=5,step=1

image.png
如果max设为5,min设为0,step设为1,则情况就只剩下5种了。
image.png
此时如果step设为0.5,则又出现10种情况,如果是0.25呢?就有了20种情况,所以这种操控的可能性是非常多的。
在Godot中还是多少有点漏色。
image.png
比Hi小胡的省力气一些。当然也不是说他的实现没有好处。

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

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

相关文章

基于Arduino IDE 野火ESP8266模块WIiFi开发

一、函数介绍 头文件 #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h>ESP8266WiFi.h库主要用于连接单个WiFi网络。如果需要连接到多个WiFi网络&#xff0c;例如在需要切换不同网络或者备用网络时&#xff0c;可以使用ESP8266WiFiMulti.h头文件&#xff…

mysql的基本知识点-排序和分组

分组&#xff08;GROUP BY&#xff09; GROUP BY 语句用于结合聚合函数&#xff0c;根据一个或多个列对结果集进行分组。例如&#xff0c;假设你有一个包含销售数据的表&#xff0c;并且你想按产品类别计算总销售额。你可以使用 GROUP BY 和 SUM() 函数来实现这一点。 SELECT…

策略模式业务实战

一、策略模式实现任务分发 1.新建策略接口 package com.ehe.elder.strategy;public interface ElderJobOrderStrategy {void notifyMethod(String outTradeNo); }2.新建策略实现类 Slf4j Component public class ElderJobOrderGranter implements ElderJobOrderStrategy {pu…

【Leetcode】top 100 多维动态规划

62 不同路径 一个机器人位于一个 m x n 网格的左上角&#xff0c;机器人每次只能向下或者向右移动一步&#xff0c;机器人试图达到网格的右下角&#xff0c;问总共有多少条不同的路径&#xff1f; 分析&#xff1a;dp[i][j] 代表走到 (i, j) 的路径总和数 递推规律&#xff1a…

java.lang.String final

关于String不可变的问题&#xff1a;从毕业面试到现在&#xff0c;一个群里讨论的东西&#xff0c;反正码农面试啥都有&#xff0c;这也是我不咋喜欢面试代码&#xff0c;因为对于我而言&#xff0c;我并不喜欢这些面试。知道或不知道基本没啥含氧量&#xff0c;就是看看源代码…

构造函数调用规则

默认情况下&#xff0c;c编译器至少给一个类添加3个函数 1&#xff0e;默认构造函数(无参&#xff0c;函数体为空) 2&#xff0e;默认析构函数(无参&#xff0c;函数体为空) 3&#xff0e;默认拷贝构造函数&#xff0c;对属性进行值拷贝(“”号赋值) 构造函数调用规则如下&…

大数据,或称巨量资料

大数据&#xff0c;或称巨量资料&#xff0c;指的是在传统数据处理应用软件不足以处理的大或复杂的数据集。大数据也可以定义为来自各种来源的大量非结构化或结构化数据。从学术角度而言&#xff0c;大数据的出现促成广泛主题的新颖研究&#xff0c;这也导致各种大数据统计方法…

【ZooKeeper】2、安装

本文基于 Apache ZooKeeper Release 3.7.0 版本书写 作于 2022年3月6日 14:22:11 转载请声明 下载zookeeper安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz解压 tar -zxvf apache-zookeeper-3.7.0-b…

【Python 48小时速成 8】函数

在 Python 中&#xff0c;函数是一段可重复调用的代码块&#xff0c;用于执行特定任务。函数可以接受参数并返回值。下面是函数的基本结构以及示例代码&#xff1a; # 示例代码一&#xff1a;定义一个简单的函数 def greet():print("Hello, World!") # 函数体内的代…

界面组态软件---昆仑通态

昆仑通态参考资料 HMI人机界面 昆仑通态专题&#xff08;三&#xff09;&#xff1a;MCGS嵌入版组态软件的报警 HMI触摸屏编程

数据结构从入门到精通——二叉树的实现

二叉树的实现 前言一、二叉树链式结构的实现1.1前置说明1.2二叉树的手动创建 二、二叉树的遍历2.1 前序、中序以及后序遍历二叉树前序遍历二叉树中序遍历二叉树后序遍历2.2 层序遍历练习 三、二叉树的具体代码实现二叉树的节点个数二叉树叶子节点个数二叉树第k层节点个数二叉树…

记录 Selenium 常用功能和API

目录 WebDriver 类 常用 APIWebElement 类 常用 API元素等待机制sleep()方法隐式等待显式等待重写 apply() 方法ExpectedConditions类中常用方法页面加载超时设置 浏览器操作控制浏览器操作Window 类Navigation 类 浏览器窗口的切换滚动条操作弹出框处理&#xff08;alert、con…

个人网站制作 Part 14 添加网站分析工具 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加网站分析工具&#x1f528;使用Google Analytics&#x1f527;步骤 1: 注册Google Analytics账户&#x1f527;步骤 2: 获取跟踪代码 &#x1f528;使用Vue.js&#…

[AIGC] Apache HTTP服务器:历史与使用

Apache HTTP服务器&#xff1a;历史与使用 Apache HTTP服务器&#xff0c;通常我们简称为Apache&#xff0c;是一款流行且强大的开源Web服务器软件。它伴随互联网的快速成长&#xff0c;并承载了许多网站服务的运行和访问。通过最新的科技和广阔的功能&#xff0c;Apache服务器…

实体框架EF(Entity Framework)简介

实体框架EF&#xff08;Entity Framework&#xff09;简介 文章目录 实体框架EF&#xff08;Entity Framework&#xff09;简介一、概述二、O/R Mapping是什么采用O/R Mapping带来哪些好处 三、Entity Framework架构3.1 下图展示了Entity Framework的整体架构3.2 Entity Framew…

MyBatis:XML操作

&#x1f451;专栏内容&#xff1a;MyBatis⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、MyBatis XML方式1、配置数据库2、指明XML路径3、写持久层代码 二、基础操作1、新增2、删除3、更新4、查找Ⅰ、开启驼峰命…

配置视图解析器

我们在指定视图的时候路径是有重复的&#xff0c;重复的操作可以用视图解析器&#xff0c;让框架帮我们&#xff1a; mv.setViewName("/WEB-INF/view/show.jsp");mv.setViewName("/WEB-INF/view/other.jsp"); 配置视图解析器&#xff1a; 注册视图解析器:帮…

202112青少年软件编程(Scratch图形化)等级考试试卷(三级)

第1题:【 单选题】 下列程序哪个可以实现: 按下空格键, 播放完音乐后说“你好! ” 2 秒? ( ) A: B: C: D: 【正确答案】: C 【试题解析】 : 第2题:【 单选题】 执行下列程序, 变量 N 的值不可能是? ( ) A:1 B:4 C:5 D:6 【正确答案】: D 【试题解析】…

制作一个RISC-V的操作系统六-bootstrap program(risv 引导程序)

文章目录 硬件基本概念qemu-virt地址映射系统引导CSR![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/86461c434e7f4b1b982afba7fad0256c.png)machine模式下的csr对应的csr指令csrrwcsrrs mhartid引导程序做的事情判断当前hart是不是第一个hart初始化栈跳转到c语言的…

ES集群部署:定时清除last_run_metadata_path数据

文章目录 引言I crontab 周期自动执行相应命令1.1 crontab语法1.2 crontab 文件示例1.3 系统范围内的 crontab 文件II logstash2.1 conf 参考2.2 statement_filepath2.3 执行引言 需求: 每天定时删除logstash的last_run_metadata_path文件,间接清除last_run_metadata_path数据…