自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 【Godot4.2】EasyTreeData通用解析

之前在《【Godot4.2】Tree控件自定义树形数据ETD及其解析》一文中实现了对带缩进的层级结构文本的解析,并将其用于Tree控件的列表项构造。不过当时并没有实现抽象的类。今天花了一点时间专门设计了这个类,可以更方便的构造和解析ETD数据,并转化为其他格式。通过内部维护一个树形结构,来存储ETD数据。条目1条目1.1\\条目1.2条目1.2.1\\条目1.2.2\\\\条目1.3\\条目1条目1.1条目1.2条目1.2.1条目1.2.2条目1.3条目1。

2024-04-30 01:24:00 770

原创 【Godot4.2】自定义富文本打印函数库 - myPrint

Godot4.2提供方法,可以在输出栏打印包含BBCode的富文本。但是显然直接用BBCode写有点费劲,所以自然而然想到封装函数库。另外,输出栏也支持特殊字符输出,所以这也是一个字符的有为之地。另外还可以打印重复字符组成的分割线、表格等。可以拓展出方便好用的输出函数,让我们的输出更个性化。

2024-04-27 23:35:03 911

原创 【Godot4.2】自定义Todo清单类 - myTodoList

在写myList类的时候,就想到可以写一个类似的Todo清单类。

2024-04-27 22:19:51 761

原创 【Godot4.2】自定义数字处理相关函数库 - myNum

在编写myList类的时候,涉及了格式化显示有序列表的序号问题,于是编写出了一套新的函数库myNum,用于方便的处理整数或浮点数格式化。初期只加入了几个简单函数,后续会加入十、十六、二进制转化以及科学计数法等内容。(本文会及时更新代码和使用案例)

2024-04-27 16:58:54 164

原创 【Godot4.2】有序和无序列表函数库 - myList

在打印输出或其他地方可能需要构建有序或无序列表。本质就是构造和维护一个纯文本数组。并用格式化文本形式,输出带序号或前缀字符的多行文本。为此我专门设计了一个类myList,来完成这项任务。有一个参数,可以传入自定义的列表符号:print(list.get_UL_string("*")) # 自定义无序列表符号* 这是一个无序列表项 * 这是一个无序列表项 * 这是一个无序列表项 * 这是一个无序列表项 * 这是一个无序列表项 * 这是一个无序列表项 * 这是一个无序列表项 * 这是一个无序列表项。

2024-04-27 16:49:56 738

原创 【Godot4.2】太极八卦图绘制

作为中国传统文化符号之一,太极八卦图,无论是哲学还是玄学,都不可能避开。之前在函数库实现了太极的点求取函数。当时采用的时圆弧拼接的方式,但是存在某些尺寸下多边形无法三角化的问题。于是就有了今天的内容。就是采取一种完全不同的思路来绘制太极。并在此基础上补足八卦的绘制。本节介绍了对复杂图形——太极八卦图的求图形顶点和绘制思路可以看到,灵活的利用绘图顺序,进行“盖印”操作,是一种聪明的图形绘制方式另外,也可以看到,有些复杂图形的求解需要使用多重线性变换。

2024-04-21 13:53:32 281

原创 【Godot4.2】圆环绘制思路以及函数

在Godot中没有办法直接绘制圆环,利用Geometry2D的布尔运算也无法实现。所以只能另想办法。这个问题其实想了有一段时间了,昨天因为QQ群群友的提问,于是就直接试验了一下,结果就有了本文。对于在Godot中绘制圆环,我自己想到两种办法。这种思路的好处是,通过求一个小梯形,然后旋转变换,就可以绘制出圆环的形状。而且这种方式可以很方便的用颜色插值做出渐变色环效果。这种方法获得的圆环一体性强,可以直接作为单个多边形绘制,顶点数目也相较第一种方式少但缺点是可能没法获得方法1样的效果。

2024-04-20 15:27:01 423

原创 【Godot4.2】极坐标点函数与绘图应用

在一个平面上基于一个定点,可以创建一个平面直角坐标系,同时也可以创建一个极坐标系。通过极坐标系,可以将平面上的点用极坐标形式描述出来。本文就记录一下如何在Godot中创建和表示极坐标点,并将其运用于绘图。本文描述了如何创建一个与Godot的屏幕坐标系保持一致的假想的极坐标系,并通过pVector2()函数来表示极坐标点pVector2()返回的实际是等价的直角坐标系中的Vector2,因此我们可以直接将它用于图形顶点的表示和绘制pVector2()本质上还是Vector2,所以可以使用Vector2。

2024-04-14 17:32:48 619

原创 【Godot4.2】绘制分形图案 - 科赫雪花

如果用向量加减和旋转方式,估计艰难绘制分形图案,好在有了myPoint类后,简单的分形图案绘制不再是什么难事。本篇我们就研究使用myPoint类在Godot的CanvasItem中绘制科赫雪花。科赫雪花是一种简单的分形图形,它的规律就是不断的将边线划分为三段,并在中间这一段向上拉出来一个正三角形。绘制思路当然是使用函数和递归,绘制出一条科赫曲线,然后通过旋转90度方式绘制其他三个边,构成一个闭合的科赫雪花。

2024-04-14 14:55:22 428

原创 【Godot4.2】myPoint类 - 基于旋转和移动的点求取方式

记得很久以前(大约17年前)有个用指令绘图的软件(不是LOGO,而是它的一个模仿者,我找半天实在找不到。),基于移动和旋转来绘制折线。每次移动和旋转都是基于当前位置和方向,就像一个人在走路一样。这是一种有别于向量旋转的方式。所以我就突发奇想,想要自己实现这种独特的绘图方法。myPoint类基本上是开辟了另一种几何图形点求取方式,可以很好的作为简单向量旋转和加减法求点形式的补充通过简单的旋转和移动函数可以绘制很多特殊几何图形,而且也可以通过进一步编写函数来参数化的快速获取图形。

2024-04-14 14:36:55 669

原创 【Godot4.2】CanvasItem绘图函数全解析 - 9.绘制表格

之前介绍TextLine和的时候,提到了用制表符和设定列宽形式来绘制简易表格,但是很明显,单纯使用此种方式很难获得对表格的精确控制。所以对于表格绘制问题,我决定单独开坑,单独深入研究。将表格数据储存为一个二维数组设定列宽然后通过遍历每个单元格数据,来构造单独的TextLine或实例,并通过列宽设定动态计算和绘制。

2024-04-14 01:45:29 325

原创 【Godot4.2】CanvasItem绘图函数全解析 - 8.绘制点索引

在示意图绘制过程中或者测试过程中,可能需要标记点的索引。最常见的形式就是用一个圆圈作为背景,用阿拉伯数字作为索引。实现的重点是动态计算背景圆的半径。原理是,获取字符串的矩形,取对角线长度的一半作为外接圆的半径。标记和绘制点索引是一种很常用且重要的效果本文只是涉及了点索引在几何图形上的使用,实际上可以将它使用在类似标记AStar路径点这样的功能上,让原本抽象的内容一下子变得清晰。

2024-04-14 01:19:51 185

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

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

2024-04-14 01:08:57 215

原创 【Godot4.2】CanvasItem绘图函数全解析 - 6.TextLine和TextParagraph详解

上一节讲述了CanvasItem内置文本绘制函数,以及TextLine和类,绘制单行和多行文本的基础内容。但是实际上TextLine和类比我们想象的要功能丰富和强大的多。本节就来详细介绍一下。本节简单补充了一下TextLine和的细节功能,包括图文混排和制表这两个非常重要的功能。其实不仅仅可以添加图片站位来实现图文混排,实际上也可以将控件或某些节点混合到文字中国对于绘制表格,如果想要更细节的控制则不能单单使用tab_align和制表符实现。对于更好的表格绘制,可以见后续文章。

2024-04-14 01:02:58 315

原创 【Godot4.2】CanvasItem绘图函数全解析 - 5.绘制字符和字符串

到这一节为止,我们已经学习了如何在CanvasItem中绘制简单几何图形、图片以及样式盒。但是对于很重要的文字一直没有涉及。本节就来讲一下字符和字符串绘制函数,以及替换它们的两个类。本节简要讲述了CanvasItem内置的字符和字符串绘制函数及其缺点然后讲述了更好用的TextLine和,用于绘制单行和多行文本。实际上TextLine和好有很多特性和功能,可以让我们轻松实现很多东西。但是篇幅所限,留到下节。对于文本绘制的综合使用,也会专门留几个案例,也是相当有趣。

2024-04-14 00:28:08 982

原创 【Godot4.2】CanvasItem绘图函数全解析 - 4.绘制样式盒

欢迎来到系列的第4节,本节我们来讲CanvasItem绘图函数中的样式盒绘制函数。:空样式盒:平面样式盒,不使用纹理,而是通过定义边框和背景色来实现。:线样式盒,可以绘制水平或垂直的分割线:纹理样式盒,类似于,可以基于九宫格形式,拼凑出自适应的纹理背景样式。而CanvasItem提供了用来绘制样式盒,上面4种都可以用这个函数来绘制。可以看到,与绘制简单的几何图形相比,样式盒可以做出更好的设计,可以很简单的实现圆角矩形以及描边和阴影等效果。我也会在下一节讲完字符和字符串绘制后,在综合案例。

2024-04-13 23:19:17 349

原创 【Godot4.2】CanvasItem绘图函数全解析 - 3.绘制纹理

前两节我们讲述了常见几何图形绘制以及对几何图形应用变换的基础知识。本节我们来讲如何在CanvasItem中绘制纹理。我们通过设定一个名叫texture的导出变量来接收从文件系统和监视器面板设定的图片。然后在_draw()中使用原样绘制出来。@toolset(val):# 绘制texture参数指定的纹理本节内容比较简单,主要涉及绘制纹理相关的3个函数。通过这3个函数,能实现很多自定义节点或绘图时的功能需要。

2024-04-13 22:57:55 655

原创 【Godot4.2】CanvasItem绘图函数全解析 - 2.设定绘图变换

上一节我们讲了如何使用绘图函数绘制常见的几何图形。在末尾绘制椭圆部分,我们简单涉及到了也就是变换的内容。关于变换的内容可以参考我即将发布的文章。这里我暂时认为你已经比较了解线性变换的本质以及如何构造、使用旋转缩放和平移变换。对2D几何图形,施加2D变换,是一个非常基础的内容,但是也很重要。通过构造几何中心在原点的图形,比如单位圆单位矩形,我们就可以通过对其施加旋转、缩放以及平移变换来获得任意的圆、椭圆以及矩形通过设定绘图变换,可以简化图形的绘制操作。

2024-04-13 20:06:42 584

原创 【Godot4.2】CanvasItem绘图函数全解析 - 1.绘制简单图形

本节通过实例来简单讲解CanvasItem绘图函数中用于图形绘制的一些函数。其他内容可以查看系列相关文章。

2024-04-13 19:33:15 643

原创 【Godot4.2】CanvasItem绘图函数全解析 - 0.概述

Godot提供了CanvasItem类型,并提供了_draw虚函数和一系列绘图函数。通过这些绘图函数,我们可以绘制各种图形、文本、纹理、样式盒、导航路径、辅助线以及制作自定义Node2D或Control。我个人以往研究和使用比较多的是基础图形绘制功能,我想这也是很多人停留的层次。但是经过我本次的一番研究,发现了很多以往忽略或不了解的功能和细节。还发现有很多其他类型本身提供了绘图函数,可以绘制在某些CanvasItem或其子类型上。本系列就尽量完整补足CanvasItem相关绘图函数以及相关类型的内容。

2024-04-13 17:54:36 329

原创 【Godot4.2】环形阵列子节点和控件环形阵列容器

今天(2024年4月13日)在群里收到群友的提问,它想实现子节点的环形排布,当然按他的说法,它实际想要实现的是一个自动环形排列子控件的自定义容器。好在我之前有自定义容器的经验,也马上想到可以用向量旋转获取圆上的定位。这是一次很好的自定义容器尝试,证明了Godot可以实现特殊的布局容器当然这种做法可能不算符合Godot容器的定义规范,对于子控件将无法再使用size_flags来实现动态大小,控件将自动被压缩至最小尺寸,除非定义了。

2024-04-13 17:39:42 366

原创 【Godot4.2】像素直线画法及点求取函数

基于CanvasItem提供的绘图函数进行线段绘制只需要直接调用draw_line函数就可以了。但是对于可以保存的图片,却需要依靠Image类,而Image类没有直接提供基于像素的绘图函数。只能依靠set_pixel或set_pixelv进行逐个像素的填色。所以问题就变成了获取线段上两点之间所有经过的点的位置的问题。搞定绘制线段后,就可以基于多个点连线绘制多边形,也就可以绘制出其他常见的几何图形。基于Image搞自己的绘图函数,其目的不言而喻,就是为了实现像素画绘制工具,以及实现。

2024-03-24 21:41:00 688

原创 【Godot4.2】注释习惯 -- 拒绝屎山,提高代码可读性

我个人于2020年9月左右开始接触Godot,在2021年8月汉化一个关于GDScript脚本注释习惯的视频时,学习到了一些有用的代码注释规则,于是逐渐将一些注释习惯引入自己的代码书写中。这些注释习惯一直延续至今,并逐渐形成我自己的一种风格。本篇就来介绍一下我自己的注释习惯,以及谈谈这样做的好处。当然你并不需要完全和我一致,每个人都有自己的习惯。如果你觉得还有哪些好的提高代码可读性的好方法,可以留言或讨论。希望本篇内容对学习Godot的小伙伴们有用。

2024-03-23 16:57:31 1243

原创 【Godot4.2】2D辅助类Geometry2D入门

Godot4.2提供了一个名叫Geometry2D的类。它提供了一些用于2D几何图形如多边形(Polygon)、折线(PolyLine)相关的函数,可以方便实现诸如多边形与多边形或多边形与折线的布尔运算求交点等。这是一个非常强大的2D几何辅助类,可以方便你基于几何图形的一些复杂操作。本篇是笔者2023年7月受到B站一个搬运视频启发,然后基于Godot内置文档研究Geometry2D并逐个尝试方法,从而总结的一份笔记。原始笔记分为两篇,这里合二为一,并可能会做一定的改写和扩充。期望对你的学习或项目有用。

2024-03-23 01:41:17 1046

原创 【Godot 3.5控件】用TextureProgress制作血条

之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat,好处是它几乎可以算是矢量的,体积小,所有东西都是样式信息,没有图片什么事儿。但是就像之前说过的,它太过局限,无法实现复杂的需求。

2024-03-22 00:10:50 1036

原创 【Godot 3.5组件】简单血条组件HealthBar

血条作为一个非常基础和常见的组件,Godot并没有给我们提供现成的,相反我们需要通过魔改Progress节点或使用节点和制作一些图片来实现它们。本篇内容介绍的是我前不久刚制作的一个简单血条组件,它是基于Progress节点和资源修改样式制作的。灵感是Hi小胡的视频。与他一步一步教你不同,我不会教你我是如何一步步制作的。相反,你只需要在自己的项目里创建一个Progress节点,你可以将它重命名为“HealthBar”。# 名称:HealthBar。

2024-03-22 00:05:21 892

原创 【Godot4.2】基础知识 - Godot中的2D向量

在Godot中,乃至一切游戏编程中,你应该都躲不开向量。这是每一个初学者都应该知道和掌握的内容,否则你将很难理解和实现某些其实原理非常简单的东西。我也是好几次想尝试完全总结这一部分内容了,这次就趁着要写公众号文章和星球剪报,尝试一次性总下。让新手们不再和我当初初学时那样迷茫。本篇汇总了我两年时间里写过的一些关于向量的东西。说明:本文写于2022年11月26日,基于的Godot版本是3.5,与目前Godot4.2在某些语法和API上可能会有差异,后续会基于4.2进行改写和拓展。

2024-03-21 23:56:49 947

原创 【Godot4.2】Rect2拓展——mRect2类

Rect2存在一些问题,比如难以获取除positionend和center之外的其他点。虽然计算并不复杂,就是简单的向量加减。但每次手动计算则比较麻烦。其实在静态函数库中,已经尝试返回矩形的四个顶点,用于绘制矩形。# 返回矩形的顶点# 注意:以(0,0)为几何中心-size/2,size/2,-size/2]mRect2要做的是基于一个Rect2,快速返回九个位置点。这个类初始创建于2023年7月9日,于2024年3月21日进行了一定的改进和扩充。

2024-03-21 21:51:36 340

原创 【Godot4.2】随机数应用案例 - 制作骰子组件

在学习随机数之后,我们就来用随机数实现骰子。初期:不要拘泥于形式。只要表现了随机,骰子可以不必做成骰子的样子。刚开始因为技术力的原因,可能无法实现比较真实和动态的骰子效果,但是这并不意为着不可以做出一个“表意”的骰子,比如一个纯数字版本的骰子也是完全可以的,因为骰子在游戏里只是提供的随机的一种工具。本篇主要是随机数应用的一个简单实例。讲解如何手搓简单的纯数字骰子和图片版骰子。同样只是抛砖引玉,讲解基础的原理,代码其实可以优化的更简洁,也可以使用Timer节点取代,以及实现摇骰子过程中显示随机的面等等。

2024-03-21 17:51:33 410

原创 【Godot4.2】实现鼠标控制对象(控件)旋转

在一些情况下我们可能需要使用鼠标控制对一个图形或对象(如控件)进行旋转。通过如下图的分析:我们只需要求出对象(如控件)中心点C到鼠标点击的位置start的向量与中心点C到鼠标移动后的位置start的向量之间的夹角θ然后将这个角度加到对象(如控件)的rotation属性上就可以了。

2024-03-21 16:00:26 468

原创 【Godot4.2】随机数入门指南

计算机程序是精确的艺术,现实生活却充满了随机性。如果你的游戏缺乏了随机性,也就缺乏了最基础的乐趣。我们在很多场景下需要使用随机数,来为已经非常刻意和规整的设计带来一些变化和趣味。比如打怪、打完Boss或开宝箱后随机掉落不同的物品,随机生成地图,判定某次攻击的命中率等等。要想成为游戏设计高手,随机数的学习和使用是躲不开的命题。本篇讲解Godot内置脚本GDScript提供的随机数生成类和方法,带你进入游戏设计随机数的大门。

2024-03-21 01:53:44 469

原创 【Godot4.2】实现简单时钟组件

Godot的CanvasItem类型提供的绘图函数,以及向量旋转,玩起来很有意思。

2024-03-21 01:20:30 412

原创 【Godot4.2】自定义简单的参数化2D网格节点

在某些情况下我们可能需要在Godot中自定义2D网格,因为此时可能用TileMap会显得太“重”,因为我们可能只需要其作为网格的功能却不需要它的其他功能,比如绘制瓦片地图。而且我们可能需要在网格功能的基础上,添加更多自定义的内容。本篇就介绍如何通过几个简单的参数定义2D网格,以及用CanvasItem的绘图函数来在Control或Node2D上显示网格。最后,我们可以将其抽象为一个简单的自定义节点Grid2D,以便于在多个场景或多个项目中重复使用。定义一个2D网格,只需要2个参数,grid_size和。

2024-03-20 01:14:00 964

原创 【Godot4.2】 基于SurfaceTool的3D网格生成与体素网格探索

说明:本文基础内容写于2023年6月,由三五篇文章汇总而成,因为当时写的比较潦草,过去时间也比较久了,我自己都得重新阅读和理解一番,才能知道自己说了什么,才有可能重新优化整理。因为我对体素网格的原始算法并不精通,当时只是依靠自己的直觉以及Godot4.2提供的工具类来实现了体素网格的生成算法。但是本文也可以作为这些工具的类的实例教程进行使用。因此体素不体素的你也可以当我没说:),重点在于用代码进行3D网格的生成。# UV坐标# 右侧面@tool# 构造AABB。

2024-03-19 22:37:18 973

原创 【Godot4.2】2D导航04 - TileMap导航的逻辑

查看icon.svg可以发现其图片大小为128×128,而我们的tileset的cell_size为16×16,所以为了将玩家显示在一个网格里,我们需要将icon.svg缩放为16×16。默认由于TileMap是world2的子节点,所以world2上用_draw绘制的内容会被TileMap绘制的地图覆盖而无法显示。128/16=8,所以我们需要将其设为原来的1/8,也就是缩小到原来的0.125倍。切换至TileMap面板,利用矩形和直线绘制方式绘制一个简单的有出口的地图。基本的导航还是可以的。

2024-03-19 22:11:35 514 1

原创 【Godot4.2】2D导航03 - NavigationRegion2D及其使用方法

Godot4.0改进了2D部分的导航,基本可以看做是3.X的的进化版本。它的基本用法就是先绘制,也就是导航网格,或者直白点就是“可通行区域”。然后将带有碰撞形状和子节点的玩家放置到这个可通行区域,然后在中判断并移动就可以了。

2024-03-19 22:09:44 987

原创 【Godot4.2】2D导航02 - AstarGrid2D及其使用方法

是Godot4.0新增的A*寻路辅助类型。可以看做是Astar2D的加强版。它允许你通过设置其size和cell_size属性来创建一个虚拟的网格。并使用这样的方法来在指定位置创建障碍物。的好处是你不再需要手动的添加点以及点与点之间的连接,而是直接用这样的方法来获取最短路径(也就是一个包含了最短路径经过的点的数组)。通过遍历这个数组,就可以实现路径移动了。# 绘制网格# 绘制路径和其上的点# 随机生成障碍# 绘制网格# 绘制路径和其上的点13行:将AstarGrid的。

2024-03-19 22:08:07 637

原创 【Godot4.2】2D导航01 - AStar2D及其使用方法

对于2D平台跳跃或飞机大战,以及一些直接用键盘方向键操控玩家的游戏,是根本用不到寻路的,因为只需要检测碰撞就可以了。但是对于像RTS或战棋这样需要操控玩家到地图指定位置的移动方式,就绝对绕不开寻路了。你可以看到,如果是单纯的使用到这样的坐标是毫无意义的,因为它们只代表屏幕上一个很小的像素区域,根本无法实现移动。回过头看看上面对A*(A-Star)算法的描述:A*(A-Star)就是前辈大神们创造的寻路算法之一。它的特点是基于网格,而且可以快速的求解某个点到另一个点的最短有效路径。

2024-03-19 22:04:02 808

原创 【Godot4.2】任意多边形或折线围绕任意点旋转

在很多绘图软件中,都会有对于任意图形围绕给定的旋转中心旋转的基本操作。本节就基于Godot实现任意多边形(Polygon)或折线(Polyline)绕任意旋转中心(在图形内或外都可以)进行旋转。

2024-03-18 21:47:44 321

原创 【Godot4.2】求沿任意直线对称的点的坐标

求一个点沿任意直线对称的点的坐标,这是一个简单的初中几何问题,如果用传统的求解思路,就是用公式,解方程组。但是作为Godot的使用者,要深谙向量的魅力。对称轴L可以被理解为一个向量A点也可以理解为一个从坐标系原点指向(x1,y1)的向量A向量与X轴的夹角为σL向量与X轴的夹角为θ则A向量与对称轴L向量的夹角θ=σ-θ`那么B点坐标就可以通过A向量旋转`2θ``求得。如果L不经过原点,那么只需要加上偏移值offset就可以了。

2024-03-18 19:17:08 300

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除