【Godot_4.2.2】关于_draw()方法

关键词:Godot,4.2.2,CanvasItem,_draw(),绘画



首先,_draw()是CanvasItem类下的一个方法,用于绘画某物。使用时需要进行调用,而不能直接使用。
具体例子和注释请看下面代码:

extends Node2D
	
# 专门设计用于存放 Vector2 的数组。数据是紧密存放的,因此能够在数组较大时节省内存。
var multiLine: PackedVector2Array = PackedVector2Array([
	Vector2(100, 300),
	Vector2(300, 400),
	Vector2(300, 400),
	Vector2(400, 200)
])

# 定义圆的半径
var circleRadius: float = 10.0

# 参数分别代表:r(红)、g(绿)、b(蓝)、a(alpha),一般在 01 的范围内
# 其中a为0时表示完全透明,为1时表示完全不透明
var whiteColor: Color = Color(1,1,1,1)

# 用来表示 2D 空间中的轴对齐矩形
# 参数1:矩形左上角的X坐标。参数2:矩形左上角的Y坐标。参数3:矩形的宽度。参数4:矩形的高度。
var rect: Rect2 = Rect2(200.0, 300.0, 200.0, 200.0)

# 专门设计用于存放 Vector2 的数组。数据是紧密存放的,因此能够在数组较大时节省内存。
var pointsArray: PackedVector2Array = PackedVector2Array([
	Vector2(700,100),
	Vector2(800,150),
	Vector2(900,100)
])

# 专门设计用于存放 Color 的数组。数据是紧密存放的,因此能够在数组较大时节省内存。
var colorArray: PackedColorArray = PackedColorArray([
	Color(1,0,0,1),
	Color(0,1,0,1),
	Color(0,0,1,1)
])

# 创建了一个新的FontFile实例,但此时它并没有关联任何字体文件
# 需要通过加载一个字体资源来使其有效
var dynamic_font = FontFile.new()
var dynamic_font_size = 80

# 定义一个变量,用于后续存储纹理资源
var texture: Texture = null

var count = 0

func _ready():
	dynamic_font.font_data = load("res://unifont-15.1.04(默认版).otf")# 双引号里的是字体资源,网上随便下个就行
	texture = load("res://icon.svg")# 双引号里的是图标资源,为godot自带的那个图标

func _process(delta):
	count += 1
	
	# 若想使用draw绘画,只能通过调用方法来实现
	# 不能直接在process方法中进行
	queue_redraw()

func _draw():
	# 根据圆心和半径,画一个圆
	# 参数1:圆心。参数2:半径
	draw_circle(Vector2(1000,500),100,whiteColor)
	
	# 根据起点和终点,画一条线
	# 参数1:起点。参数2:终点
	draw_line(Vector2(0,0),Vector2(100,100),whiteColor)
	
	# 画多条断开的线段
	# 这相邻两个点之间会连成线,如点1和点2,点3和点4,因此点的数量必须是复数
	draw_multiline(multiLine,whiteColor)
	
	# 画一个矩形,第3个参数filled默认为true
	# 当它为false时,则矩形将被绘制为具有指定的color(第2个参数)和width(第4个参数,默认为-1.0,表示缩放时始终保持细线)的笔划
	draw_rect(rect,whiteColor,false,20)
	
	# 绘制自定义图元,至少要填3个参数
	# 参数1Vector2紧缩数组(PackedVector2Array)
	# 1个点的是个点,2个点的是线段,3个点是三角形,4个点是四边形。如果没有指定点或者指定了超过4个点,则不会绘制任何东西,只会输出错误消息
	# 参数2Color紧缩数组(PackedColorArray)
	# 参数3为uvArray,这个数组用于指定每个顶点的纹理坐标,以便相应地从纹理中取样
	# 如果你有一个纹理,并且想要将它映射到通过 pointsArray 定义的形状上,您需要提供 UV 坐标,使得渲染引擎知道如何将纹理应用到模型的每个点
	# UV坐标的范围通常是从(0,0)(1,1)。前者表示纹理的左下角,后者表示纹理的右上角
	# 如果没有需要映射的纹理,则填[]
	draw_primitive(pointsArray,colorArray,[])
	
	# 绘制文本内容
	# 参数1:字体。参数2:显示位置。参数3:文本内容
	# 参数4:默认值为0,其中:
	# 	● HORIZONTAL_ALIGNMENT_LEFT = 0 水平左对齐,常用于文本派生类
	# 	● HORIZONTAL_ALIGNMENT_CENTER = 1 水平居中对齐,常用于文本派生类
	# 	● HORIZONTAL_ALIGNMENT_RIGHT = 2 水平右对齐,常用于文本派生类
	# 	● HORIZONTAL_ALIGNMENT_FILL = 3 扩展行以适应宽度,常用于文本派生类
	# 参数5:width宽度,默认为-1.如果width≥0,则文本超过指定宽度将被裁剪
	# 参数6:字体大小,默认为16,为int型
	draw_string(dynamic_font,Vector2(600,300),"I'm player!",HORIZONTAL_ALIGNMENT_LEFT,-1,dynamic_font_size)
	
	if count >= 90:
		# 在指定位置绘制纹理
		# 参数1:纹理。参数2:坐标。参数3:modulate: Color,默认为Color(1, 1, 1, 1)
		draw_texture(texture,Vector2(400,400))


场景只有这1个,如下图:
在这里插入图片描述


最后是运行结果,其中godot图标一开始是不显示的,直到count的值等于90
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值