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

news2024/9/22 11:29:30

说明

本文写自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.coloradmin.cn/o/1535011.html

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

相关文章

小程序云开发实战:通用企业产品信息展示小程序

之前做小程序都是自己搭建数据管理后台,比如我之前做的小程序:一搜就学,就是使用java来做管理后台,小程序做前端展示。但是对于简单的小程序来说,做一套管理后台有点拿大炮打蚊子,所以使用云开发就是不错的…

【MySQL】对数据库的操作以及数据库备份相关操作

👦个人主页:Weraphael ✍🏻作者简介:目前学习计网、mysql和算法 ✈️专栏:MySQL学习 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

开源表单设计器颗粒度级别控制表单的显示条件原理分析

表单渲染中, 有些表单的显示有不同条件, 比如需要上一个表单的开关打开,或者文本内容为 xxxx, 或者需要大于或等于或小于指定值, 或者需要选中某个选项, 或者需满足以上多个条件或在满足多个条件中的一个, 有 n 种场景选择, 这样就需要条件显示配置功能, 来满足多样化需求 预览…

基于python+vue中医学习服务管理系统flask-django-php-nodejs

随着世界经济信息化、全球化的到来和互联网的飞速发展,推动了各行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、动态的、交互友好的、高效的中医学习服务管理系统。当前的信息管理存在工作…

动态QCA|一条通向动态QCA产出的道路

一、动态QCA原理介绍 (一)动态QCA介绍 QCA(Qualitative Comparative Analysis)是一种定性比较分析方法,用于研究中小样本量的数据,旨在探索变量之间的复杂关系。在QCA中,研究者将变量分为二元变…

js中filter处理后端返回表格数据

<template><div><el-table:data"tableData"style"width: 100%"><el-table-column:formatter"tranForm"prop"gender"label"性别"width"180"></el-table-column><el-table-column…

Lombok插件的安装和使用说明

什么是Lombok?? Lombok是一个通过注解以达到减少代码的Java库,如通过注解的方式减少get,set方法,构造方法等。 //普通的实体类public class Student {private Integer id;private Integer age;public Integer getId () {return id;}public void setId (Integer id) {this.id …

赋能 DevOps:平台工程的关键作用

在当今快节奏的数字环境中&#xff0c;DevOps 已成为寻求简化软件开发和交付流程的组织的关键方法。DevOps 的核心在于开发和运营团队之间协作的概念&#xff0c;通过一组旨在自动化和提高软件交付生命周期效率的实践和工具来实现。 DevOps 实践的关键推动因素之一是平台工程。…

libVLC 设置视频宽高比

宽高比是指视频图像的宽度和高度之间的比率。 投影屏幕尺寸一般都按照对角线的大小来定义的。根据图像制式不同&#xff0c;屏幕的长宽比例也有几种格式&#xff1a; 传统影视的宽高比是 4&#xff1a;3&#xff0c;宽屏幕电影的宽高比是 1.85&#xff1a;1&#xff0c;高清晰…

如何部署GPT模型至自有服务器:从零开始搭建你的智能聊天机器人

引言 GPT模型是自然语言处理领域的重要突破&#xff0c;它能够通过生成式的文本生成方式&#xff0c;实现与用户的智能交互。本文将详细介绍如何将GPT模型部署到自有服务器上&#xff0c;并编写一个基本的API接口来实现与聊天机器人的交互。 目录 引言 一、准备工作 首先&am…

填补市场空白,Apache TsFile 如何重新定义时序数据管理

欢迎全球开发者参与到 Apache TsFile 项目中。 刚刚过去的 2023 年&#xff0c;国产开源技术再次获得国际认可。 2023 年 11 月 15 日&#xff0c;经全球最大的开源软件基金会 ASF 董事会投票决议&#xff0c;时序数据文件格式 TsFile 正式通过&#xff0c;直接晋升为 Apache T…

Java算法总结之插入排序(详解)

程序代码园发文地址&#xff1a;Java算法总结之插入排序&#xff08;详解&#xff09;-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,Java算法总结之插入排序&#xff08;详解&#xff09;http://www.byqws.com/blog/3148.html?sourcecsdn 插入排…

iOS18系统中,苹果可能不再使用Siri,转用Gemini

生成式人工智能&#xff08;Generative AI&#xff09;是苹果公司近两年来默默投资的强大人工智能工具。 坊间流有多种传闻&#xff0c;官方最近终于曝光结果&#xff1a;苹果和谷歌正在谈判将 Gemini AI 引入 iPhone&#xff0c;预计将于今年在所有 iOS 18 设备上推出。 到目前…

Neo4j安装下载以及服务器部署

注意&#xff1a; 下载neo4j之前&#xff0c;需要下载jdk&#xff0c;这里默认已经下载过jdk 版本配置&#xff1a;3.X 支持 1.8jdk&#xff1b;4.X 支持 11jdk 本地安装 1.下载对应JDK支持的安装包 推荐从这里下&#xff0c;直接解压可用&#xff1a;Index of /doc/ne…

CMU 10-414/714: Deep Learning Systems --hw4

通过之前作业中完成的所有组件,使用高性能的网络结构来解决一些问题。首先会增加一些新的算子(使用CPU/CUDA后端),然后完成卷积、以及用一个卷积神经网络来在CIFAR-10图像数据集上训练一个分类器。接着需要完成循环神经网络(带LSTM),并在Penn Treebank数据集上完成字符级…

使用Cpolar异地组网,在vscode上ssh远程开发ubuntu主机

目录 开发环境 操作流程 参考资料 在机器人被搬到另一个屋之后&#xff0c;通过局域网进行ssh开发就变成了个困难的问题。因此尝试了异地组网来解决这个问题&#xff0c;看了一些资料后发现基于cpolar进行异地组网也不困难&#xff0c;这里记录一下步骤。 开发环境 硬件&…

Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别

Self-Attention和RNN、LSTM的区别 RNN&#xff08;循环神经网络&#xff09; RNN&#xff0c;当前的输出 o t o_t ot​取决于上一个的输出 o t − 1 o_{t-1} ot−1​&#xff08;作为当前的输入 x t − 1 x_{t-1} xt−1​&#xff09;和当前状态下前一时间的隐变量 h t h_t h…

Vue3学习记录(七)--- 组合式API之指令和插件

一、内置指令 1、v-memo ​ 该指令是Vue3的v3.2版本之后新增的指令&#xff0c;用于实现组件模板缓存&#xff0c;优化组件更新时的性能。该指令接收一个固定长度的依赖值数组&#xff0c;在组件进行更新渲染时&#xff0c;如果数组中的每个依赖值都与上一次渲染时的值相同&a…

web前端笔记+表单练习题+五彩导航栏练习题

web前端笔记 1-骨架快捷方式!enter<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>骨架部分</titl…

刚进公司第一天-电脑环境搭建

写在前面 之前在公司做过一次开发小工具的分享&#xff0c;这两天有个同事找我学习一些小工具开发的知识&#xff0c;但是我发现他的基础是真的差&#xff0c;想学开发知识却连自己本地电脑环境都没弄好&#xff0c;确实&#xff0c;有些人工作了很久&#xff0c;由于自己工作中…