【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

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象