【Godot】根据 Image/Texture 创建不规则碰撞形状

该文章介绍了一个在Godot4.0稳定版中创建不规则碰撞形状的方法,通过使用Image和Node2D(如Sprite2D,AnimatedSprite2D)来根据图片的Alpha通道生成点列表,并可进行位置偏移调整,以适应游戏场景中的碰撞检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Godot 4.0 stable

##  根据图片创建不规则碰撞形状
##[br]
##[br][code]image[/code]  图片
##[br][code]canvas_node[/code]  画布节点。[Sprite2D, AnimatedSprite2D] 中的类型,用于根据节点的属性进行偏移点的坐标
##[br][code]group_idx[/code]  创建出的点位组的列表索引。因为可能一张图片有多个图块,会生成超过一组的点列表
static func create_collision_polygon_from_image(image: Image, canvas_node: Node2D = null, group_idx: int = 0) -> CollisionPolygon2D:
	# 获取图片点
	var bit_map = BitMap.new()
	bit_map.create_from_image_alpha(image)
	var points_list = bit_map.opaque_to_polygons(Rect2(Vector2(), image.get_size()))
	
	# 偏移位置
	var points = points_list[group_idx]
	if canvas_node:
		assert(canvas_node is Sprite2D or canvas_node is AnimatedSprite2D, "画布节点需要是 [Sprite2D, AnimatedSprite2D] 类型的节点")
		var offset_pos : Vector2 = Vector2(0, 0)
		if canvas_node is Sprite2D or canvas_node is AnimatedSprite2D:
			if canvas_node.centered:
				offset_pos = -image.get_size() / 2
			offset_pos += canvas_node.offset
		if offset_pos != Vector2(0,0):
			for i in len(points_list):
				points[i] = points[i] + offset_pos
	
	# 创建碰撞
	var coll = CollisionPolygon2D.new()
	points.remove_at(0)
	coll.polygon = points
	return coll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值