Godot 纯代码检测某个区域范围内的碰撞节点

纯代码检测某个区域范围内的碰撞节点

内容如下

extends Node2D

var shape_cicle := CircleShape2D.new()		# 圆形碰撞形状

func _ready():
    # 输出坐标 (200,200) 大小为 100 的区域的碰撞节点的个数
	print(get_layer_node(100, Vector2(200, 200)))
	
func get_layer_node(radius, pos:Vector2):
    """获取 pos 范围内的碰撞节点
	@radius 圆形半径范围
	@pos 位置
	"""
	# 设置碰撞形状
	shape_cicle.radius = radius
	
	# 新建 Physics2DShapeQueryParameters 并配置
	var p = Physics2DShapeQueryParameters.new()
	p.set_shape(shape_cicle)		# 设置碰撞形状
	p.collide_with_areas = true		# 监测 Area 区域
	p.collision_layer = 1			# 对应被检测物体的 layer 层级
	p.transform = Transform2D(0, pos)	# 设置碰撞的位置
	
	# 检测碰撞
	var arr = get_world_2d().direct_space_state.intersect_shape(p)
	return arr	# 返回碰撞结果

猜你喜欢

转载自blog.csdn.net/qq_37280924/article/details/107943261