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

【Godot4】状态栏组件StatusBar

概述

一个包含多个水平排列文本的状态栏组件。

类设计

// 状态栏
StatusBar{items:Array[StatusBarItem]        // 项数据style:StyleBoxFlat                // 样式盒子add_item(text,pos:=-1,fill=false,h_aligin= left)   	// 添加文本项
} // 状态栏项[内部类]
StatusBarItem(Resource){text:String     // 文本fill:bool   // 书否水平拉伸aligin:left	// 文本对齐方式
}

实现

状态栏组件

# 状态栏组件
# 创建时间2025722日
@tool
extends PanelContainer# 水平对齐方式
enum h_aligns{LEFT,CENTER,RIGHT}# -------------------------- 参数 --------------------------
@export var items:Array[StatusBarItem]:        # 按行划分的项数据set(val):items = valif !is_node_ready():await readyload_items()# 整个状态栏的背景样式盒子
@export var bg_style:StyleBoxFlat:               set(val):bg_style = valif !is_node_ready():await readyadd_theme_stylebox_override("panel",val)# 单个状态栏单元格的样式
@export var cell_style:StyleBoxFlat:               set(val):cell_style = valif !is_node_ready():await readyload_items()# -------------------------- 节点引用 --------------------------
@onready var hbox: HBoxContainer = %HBox
# -------------------------- 方法 --------------------------
# 添加项
func add_item(text:String,pos:int=-1,fill:bool=false,h_align:int= h_aligns.LEFT): var itm = StatusBarItem.new()itm.text = textitm.align = h_alignitm.fill = fillif pos == -1:items.append(itm)else:items.insert(pos,itm)# 清空
func clear():for child in hbox.get_children():child.queue_free()pass# 加载所有已经设置好的项目为Label控件
func load_items():clear()for itm in items:var lab = Label.new()lab.text = itm.textlab.horizontal_alignment = itm.filllab.add_theme_stylebox_override("normal",cell_style)if itm.fill:lab.size_flags_horizontal = Control.SIZE_EXPAND_FILLhbox.add_child(lab)# 设置制定项的文本
func set_itm_text(idx:int,new_text:String):if idx in range(items.size()):items[idx].text = new_text

StatusBarItem

# 状态栏项信息
# 2025722日
@tool
extends Resource
class_name StatusBarItemenum h_align{LEFT,CENTER,RIGHT}
## 文本
@export var 	text:String: set(val):text = valemit_changed()## 是否水平拉伸
@export var 	fill:bool:   set(val):fill = valemit_changed()
## 文本对齐方式
@export_enum("left","center","right") var align:int:  set(val):align = valemit_changed()

效果:

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

相关文章:

  • python中 tqdm ,itertuples 是什么
  • RabbitMQ--批量处理
  • halcon手眼标定z方向实操矫正
  • VUE 中父级组件使用JSON.stringify 序列化子组件传递循环引用错误
  • 机器人氩弧焊保护气降成本的方法
  • Apache Ignite 的 SQL 功能和分布式查询机制
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ImageCarousel(图片轮播组件)
  • 深度学习篇---车道线循迹
  • FPGA自学——存储器模型
  • Kafka单条消息长度限制详解及Java实战指南
  • Apache Ignite 中 WHERE 子句中的子查询(Subqueries in WHERE Clause)的执行方式
  • Android 中 实现日期选择功能(DatePickerDialog/MaterialDatePicker)
  • 【无标题】buuctf-re3
  • JAVA中的IO流(四)数据流
  • 一个电脑抓包工具
  • 黄仁勋强调:首先,我是中国人
  • Python进阶第三方库之Numpy
  • 用手机当外挂-图文并茂做报告纪要
  • 云祺容灾备份系统Hadoop备份与恢复实操手册
  • 如何在 Windows 10 下部署多个 PHP 版本7.4,8.2
  • WIFI路由器长期不重启,手机连接时提示无IP分配
  • Android接入RocketMQ的文章链接
  • Spring Boot 使用Jasypt加密
  • Cy3-COOH 花菁染料Cy3-羧基
  • 《小白学习产品经理》第八章:方法论之马斯洛需求层次理论
  • 用ffmpeg 进行视频的拼接
  • 从 0 到 1 搞定nvidia 独显推流:硬件视频编码环境安装完整学习笔记
  • Golang避免主协程退出方案
  • 前端葵花宝典
  • 《Uniapp-Vue 3-TS 实战开发》自定义时间选择