【Godot4.3】Polygon2D详解

概述

去年9月的测试性文章,后续补充完整。

翻转

polygon1.invert_enabled = true  # 翻转
print(polygon1.polygon)
polygon1.invert_border = 0.01   # 翻转后的边距
print(polygon1.polygon)

原始多边形invert_border = 100(默认)invert_border = 0.1

打印出的数据:

[(195, 152), (257, 74), (374, 25), (448, 107), (543, 187), (461, 272), (380, 323), (319, 345), (251, 296), (156, 227)]
[(195, 152), (257, 74), (374, 25), (448, 107), (543, 187), (461, 272), (380, 323), (319, 345), (251, 296), (156, 227)]

表明,invert_enabled并不是简单的翻转顶点顺序。

显示多个多边形

extends Node2D

@onready var polygon1 = $Polygon1
@onready var polygon2: Polygon2D = $Polygon2
@onready var polygon_result: Polygon2D = $PolygonResult



func _ready():
	var p1 = polygon1.polygon
	var p2 = polygon2.polygon
	var aa = Geometry2D.clip_polygons(p1,p2)
	
	# 将两个
	var p:PackedVector2Array
	p = aa[0] + aa[1]
	
	print(p1)
	print(aa[0])
	print(Geometry2D.is_polygon_clockwise(aa[0]))
	print(p2)
	print(aa[1])
	print(Geometry2D.is_polygon_clockwise(aa[1]))
	polygon_result.polygon = p
	polygon_result.polygons = [[0,1,2,3],[4,5,6,7]]

通过为不同多边形的顶点设定不同的颜色,可以将重叠的多个多边形区分开来。

实现阵列

extends Node2D

@onready var polygon1 = $Polygon1
@onready var polygon_result: Polygon2D = $PolygonResult



func _ready():
	var p1 = polygon1.polygon
	
	var polygons = polygon_array1(p1,3,Vector2.RIGHT * 200)
	
	polygon_result.polygon = polygons["points"]
	polygon_result.polygons = polygons["polygons"]
	
# 多边形线性一维阵列
func polygon_array1(polygon:PackedVector2Array,num:int,offset:Vector2) -> Dictionary:
	var dic ={
		points = [],
		polygons = []
	}

	for i in range(num):
		# 添加多边形点集合
		dic["points"].append_array(offset_polygon(polygon,offset * i))
		# 添加多边形点索引
		dic["polygons"].append(range(polygon.size() * i,(i+1) * polygon.size()))
	return dic

# 对多边形进行偏移
func offset_polygon(polygon:PackedVector2Array,offset:Vector2) -> PackedVector2Array:
	var arr:PackedVector2Array = polygon.duplicate()
	for i in range(arr.size()):
		arr.set(i,arr[i] + offset)
	return arr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巽星石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值