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

【Godot4.3】基于纯绘图函数自定义的线框图控件

概述

同样是来自2023年7月份的一项实验性工作,基于纯绘图函数扩展的一套线框图控件。初期只实现了三个组件,矩形、占位框和垂直滚动条。

初期矩形、占位框和垂直滚动条三组件的测试样式

本文中的三个控件类已经经过了继承化的修改,使得代码更少。它们的继承关系如下:

在这里插入图片描述

源代码

WireFrameRect(矩形)

# ========================================================
# 名称:WireFrameRect
# 类型:控件
# 简介:线框图,矩形
# 作者:巽星石
# Godot版本:4.1-stable (official)
# 创建时间:2023-07-08 03:13:48
# 最后修改时间:20249222:44:34
# ========================================================
@tool
class_name  WireFrameRect extends Control
# =================================== 参数 ===================================
# 背景颜色
@export var bk_color:Color = Color.WHITE:set(val):bk_color = valqueue_redraw()# 线条颜色
@export var line_color:Color = Color.BLACK:set(val):line_color = valqueue_redraw()# 线条宽度
@export var line_width:int = 1:set(val):line_width = valqueue_redraw()# =================================== 绘制 ===================================
func _draw():draw_rect2(get_draw_safety_rect())# =================================== 自定义函数 ===================================
# 获取绘制函数能正确使用的控件Rect2
func get_draw_safety_rect() -> Rect2:var rect = get_rect()return Rect2(rect.position - position,rect.size/scale)# 绘制带填充和轮廓的矩形
func draw_rect2(rect:Rect2,bg_color := bk_color,border_color := line_color,border_width := line_width,canvas:CanvasItem = self,
) -> void:canvas.draw_rect(rect,bg_color)                     # 绘制填充canvas.draw_rect(rect,border_color,false,border_width)  # 绘制外框

WireFrameBox(占位框)

# ========================================================
# 名称:WireFrameBox
# 类型:控件
# 简介:线框图,占位框(带对角线)
# 作者:巽星石
# Godot版本:4.1-stable (official)
# 创建时间:2023-07-08 03:13:48
# 最后修改时间:20249222:19:32
# ========================================================
@tool
class_name  WireFrameBox extends WireFrameRect
# =================================== 绘制 ===================================
func _draw():var rect = get_draw_safety_rect()super._draw() # 调用父类绘制基础矩形# 绘制对角线draw_line(rect.position,rect.end,line_color,line_width)var width = Vector2.RIGHT * rect.size.xdraw_line(rect.position + width,rect.end - width,line_color,line_width)

WireFrameVScrollBar(垂直滚动条)

# ========================================================
# 名称:WireFrameVScrollBar
# 类型:控件
# 简介:线框图,垂直滚动条
# 作者:巽星石
# Godot版本:4.1-stable (official)
# 创建时间:2023-07-08 03:13:48
# 最后修改时间:20249222:44:19
# ========================================================
@tool
class_name  WireFrameVScrollBar extends WireFrameRect
# =================================== 参数 ===================================
# 按钮 - 背景颜色
@export var btn_bk_color:Color = Color.DARK_GRAY:set(val):btn_bk_color = valqueue_redraw()# 滑动条 - 背景颜色
@export var bar_bk_color:Color = Color.DARK_GRAY:set(val):bar_bk_color = valqueue_redraw()# =================================== 绘图 ===================================
func _draw():var rect = get_draw_safety_rect()super._draw() # 调用父类绘制基础矩形# 绘制顶部和底部按钮var btn_size = Vector2.ONE * rect.size.x      # 按钮宽度var top_btn_rect = Rect2(rect.position,btn_size)  # 顶部矩形var bottom_btn_rect = Rect2(rect.end - btn_size,btn_size)draw_rect2(top_btn_rect,btn_bk_color)draw_rect2(bottom_btn_rect,btn_bk_color)# 绘制中间滑动条var bar_pos = Vector2(0,btn_size.y+10)var bar_size = Vector2(rect.size.x,rect.size.y - 2 * btn_size.y  - 30)var bar_rect = Rect2(bar_pos,bar_size)  #滑动条矩形draw_rect2(bar_rect,bar_bk_color)

使用方法

在UI场景中可以通过“添加节点”对话框自由添加。然后通过拖动修改位置,再通过检视器面板设定相应的颜色样式和轮廓宽度等。

在这里插入图片描述

总结

  • 这也是一项很随意的试验性工作,初期并没有采用类的继承,所以参数有很多重复代码,经过改进之后,代码量下降,而且可以很好的进行拓展。
  • 你可能会问在Godot这么简单的软件中还需要线框图嘛,直接干不就行了。但其实线框图作为一个设计阶段的工具对整体策划和把握还是有一定作用的。尤其是对UI界面设计。
  • 目前因为组件少,当然还发挥不了很强的UI界面设计能力,但是后期组件丰富后,应该也能便捷的用于Godot程序或游戏流程的原型设计。尤其是加入一些跳转场景等功能之后。
http://www.lryc.cn/news/432205.html

相关文章:

  • 申万宏源证券完善金融服务最后一公里闭环,让金融服务“零距离、全天候”
  • 无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了。
  • 系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践
  • centos8stream 修改为阿里云yum源
  • python转换并提取pdf文件中的图片
  • 【MySQL】MySQL常用的数据类型——表的操作
  • 自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法
  • 计算机网络(一) —— 网络基础入门
  • 从监控到智能:EasyCVR视频汇聚平台助力加油站安全监管升级转型
  • 日志服务管理
  • ROS 工具箱系统要求
  • CSS解析:定位和层叠上下文
  • 无名管道与有名管道的区别(C语言)
  • Vue+Nginx前端项目多种方式部署一文搞定(练习源码自取)
  • MATLAB 中双引号 ““ 和单引号 ‘‘ 的区别详解
  • Linux概述、远程连接、常用命令
  • 闯关leetcode——1.Two Sum
  • 02 Shell Script注释和debug
  • 如何设计项目架构
  • OTG配置为USB盘之二
  • 如何使用 PHP 函数与其他 Web 服务交互?
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • 机器学习如何用于音频分析?
  • 适合程序员在周末阅读的历史书籍:理解人性和世界
  • 探索Mem0:下一代人工智能与机器学习内存管理基础设施(二)Mem0+Ollama 部署运行
  • C++入门10——stack与queue的使用
  • 詳細解析軟路由與代理爬蟲池-okeyproxy
  • 视频监控管理平台LntonAIServer视频智能分析噪声检测应用场景
  • 技术分享-商城篇-用户中心-注销修改(二十三)
  • Linux-实用指令