【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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄