【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