【Godot4.2】CanvasItem绘图函数全解析 - 7.自定义节点TextBoard

本文主要是介绍【Godot4.2】CanvasItem绘图函数全解析 - 7.自定义节点TextBoard,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

之前发布的几篇文章几乎阐述了CanvasItem绘图函数最基础的内容。
本篇结合draw_style_box()TextParagraph类,自定义了一个可以自适应宽高显示多行文本,且带有一个样式盒作为背景的文字板节点TextBoard

系列目录

  • 0.概述
  • 1.绘制简单图形
  • 2.设定绘图变换
  • 3.绘制纹理
  • 4.绘制样式盒
  • 5.绘制字符和字符串
  • 6.TextLine和TextParagraph详解
  • 7.自定义节点TextBoard
  • 8.绘制点索引
  • 9.绘制表格

完整代码

# ========================================================
# 名称:TextBoard
# 类型:自定义Node2D
# 简介:一个可以自适应显示多行文本的节点,并带有一个边框样式盒
# 作者:巽星石
# Godot版本:v4.2.1.stable.official [b09f793f5]
# 创建时间:20244821:15:22
# 最后修改时间:20244822:45:38
# ========================================================@tool
class_name TextBoard
extends Node2Dvar style_box:StyleBoxFlat       # 样式盒
var font:Font = ThemeDB.fallback_font# ======================= 参数 =============================
## 样式盒背景色
@export var bg_color:= Color.WHITE:set(val):bg_color = valstyle_box.bg_color = valqueue_redraw()## 样式盒内边距
@export var padding:float = 5.0:set(val):padding = valstyle_box.content_margin_bottom = valstyle_box.content_margin_top = valstyle_box.content_margin_left = valstyle_box.content_margin_right = valqueue_redraw()
# ----------------------- 边框设定 ----------------------- 
@export_group("border")
## 样式盒边框色
@export var border_color:= Color.GRAY:set(val):border_color = valstyle_box.border_color = valqueue_redraw()## 样式盒边框宽度
@export var border_width:int = 0:      set(val):border_width = valstyle_box.border_width_top = valstyle_box.border_width_bottom = valstyle_box.border_width_left = valstyle_box.border_width_right = valqueue_redraw()## 样式盒边框圆角
@export var conner:int = 0:set(val):conner = valstyle_box.corner_radius_bottom_left = valstyle_box.corner_radius_top_left = valstyle_box.corner_radius_top_right = valstyle_box.corner_radius_bottom_right = valqueue_redraw()
# ----------------------- 文本设定 ----------------------- 
@export_group("text")
## 要显示的文本内容
@export_multiline var text:String:set(val):text = valqueue_redraw()
## 单行最大宽度,用于自动换行
@export var max_width:=-1: set(val):max_width = valqueue_redraw()
## 字号
@export var font_size:int = 16:set(val):font_size = valqueue_redraw()## 字色	
@export var font_color:= Color.WHITE:set(val):font_color = valqueue_redraw()# ======================= 虚函数 =============================
# 初始化
func _init() -> void:style_box = StyleBoxFlat.new()# 绘图
func _draw() -> void:# 创建单行文本var p = TextParagraph.new()p.add_string(text,font,font_size)p.width = max_width  # 限制宽度# 绘制单行文本的矩形区域var m = Vector2(padding + border_width,padding + border_width)var size = p.get_size() + 2 * mdraw_style_box(style_box,Rect2(-size/2,size))# 绘制多行文本p.draw(get_canvas_item(),-size/2 + m,font_color)

效果:
image.png
image.png
image.pngimage.png

这篇关于【Godot4.2】CanvasItem绘图函数全解析 - 7.自定义节点TextBoard的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902170

相关文章

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决