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

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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值