【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814072.shtml

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

相关文章

SPP论文笔记

这篇论文讨论了在深度卷积网络中引入空间金字塔池化(SPP)层的方法,以解决传统深度卷积网络需要固定图像尺寸的限制。以下是论文各部分的总结: 1. 引言 论文指出现有的深度卷积神经网络(CNN)需要固定大小的…

全景剖析SSD SLC Cache缓存设计原理-2

四、SLC缓存对SSD的寿命是否有优化? 当使用QLC或TLC NAND闪存并将其切换到SLC模式进行写入时,会对闪存的寿命产生以下影响: 短期寿命提升: SLC模式下,每个存储单元仅存储一个比特数据,相对于QLC或TLC来说…

前端vue: 使用ElementUI适配国际化

i18n介绍 i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。 前端国际化步骤 1、安装i18n插件 安装插件时候,注意必须指定版本号,不然安装会报错。 npm i vue-i1…

linux 部署安装mongodb教程

现在去官网下载mongodb的tar包,在本地创建文件夹 cd /home wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.17.tgz tar -zxvf mongodb-linux-x86_64-rhel70-4.2.17.tgz mv mongodb-linux-x86_64-rhel70-4.2.17 mongodb cd /home/mongodb mkdir log t…

GAN:对抗式生成网络之图片生成

对抗式生成网络(Adversarial Generative Network, AGN)这一术语在您提供的信息中并未直接出现。通常,在深度学习文献和实践中,与“对抗”和“生成”概念相结合的网络架构指的是生成式对抗网络(Generative Adversarial Networks, GANs)。GANs由Ian Goodfellow等人于2014年…

数据结构之单链表相关刷题

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构 数据结构之单链表的相关知识点及应用-CSDN博客 下面题目基于上面这篇文章: 下面有任何不懂的地方欢迎在评论区留言或…

wangeditor与deaftjs的停止维护,2024编辑器该如何做技术选型(一)

wangeditor暂停维护的声明: wangeditor是国内开发者开发的编辑器,用户也挺多,但是由于作者时间关系,暂停维护。 deaft的弃坑的声明: draft是Facebook开源的,但是也弃坑了,说明设计的时候存在很大…

LeetCode最长有效括号问题解

给定一个仅包含字符的字符串(’ 和 ‘)’,返回最长有效的长度(出色地-形成) 括号子弦。 示例1: 输入:s “(()” 输出:2 说明:最长的有效括号子字符串是 “()” 。 示例2: 输入:s “)()())…

在Linux上利用mingw-w64生成exe文件

一、概要 1、elf与exe 在Linux上用gcc直接编译出来的可执行文件是elf格式的,在Windows上是不能运行的 Windows上可执行文件的格式是exe 利用mingw-w64可以在Linux上生成exe格式的可执行文件,将该exe文件拷贝到Windows上就可以运行 2、程序要留给用户…

体验Humane AI:我与可穿戴AI别针的生活

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

如何使用 ArcGIS Pro 制作热力图

热力图是一种用颜色表示数据密度的地图,通常用来显示空间分布数据的热度或密度,我们可以通过 ArcGIS Pro 来制作热力图,这里为大家介绍一下制作的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数…

JVM复习

冯诺依曼模型与计算机处理数据过程相关联: 冯诺依曼模型: 输入/输出设备存储器输出设备运算器控制器处理过程: 提取阶段:输入设备传入原始数据,存储到存储器解码阶段:由CPU的指令集架构ISA将数值解…

分布式技术--------------ELK大规模日志实时收集分析系统

目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.…

搭建基于Hexo的个人博客,以及git相关命令

全文写完之后的总结 测试命令 hexo clean hexo g hexo s 上传到服务器命令 hexo clean hexo g hexo d 上传到服务器(如果上一个命令用不了),也要先hexo clean,hexo g git init git add . git commit -m "first commit" git p…

部署HDFS集群(完全分布式模式、hadoop用户控制集群、hadoop-3.3.4+安装包)

目录 前置 一、上传&解压 (一 )上传 (二)解压 二、修改配置文件 (一)配置workers文件 (二)配置hadoop-env.sh文件 (三)配置core-site.xml文件 &…

Fuel tank position

Fuel tank position 汽车油箱位置在哪里,加油的时候就不会听错方向

uni-app的页面中使用uni-map-common的地址解析(地址转坐标)功能,一直报请求云函数出错

想在uni-app的页面中使用uni-map-common的地址解析(地址转坐标)功能,怎么一直报请求云函数出错。 不看控制台啊,弄错了控制台,就说怎么一直没有打印出消息。 所以开始换高德地图的,昨天申请了两个 一开始用的第二个web…

OpenAI CEO山姆·奥特曼推广新AI企业服务,直面微软竞争|TodayAI

近期,OpenAI的首席执行官山姆奥特曼在全球多地接待了来自《财富》500强公司的数百名高管,展示了公司最新的人工智能服务。在旧金山、纽约和伦敦的会议上,奥特曼及其团队向企业界领袖展示了OpenAI的企业级产品,并进行了与微软产品的…

前端入门:极简登录网页的制作(未使用JavaScript制作互动逻辑)

必备工具:vscode Visual Studio Code - Code Editing. Redefined 目录 前言 准备 HTML源文件的编写(构建) head部分 body部分 网页背景设置 网页主体构建 CSS源文件的编写(设计) 结果展示 前言 博主稍稍自…

如何保证消息不丢失?——使用rabbitmq的死信队列!

如何保证消息不丢失?——使用rabbitmq的死信队列! 1、什么是死信 在 RabbitMQ 中充当主角的就是消息,在不同场景下,消息会有不同地表现。 死信就是消息在特定场景下的一种表现形式,这些场景包括: 消息被拒绝访问&am…