碰撞物体
Area2D
Area2D 节点提供 检测 和 影响 . 它们可以检测物体何时重叠, 并在物体进入或离开时发出信号. Area2D 也可用于覆盖物理属性, 例如一定区域内的重力或阻尼.
StaticBody2D
静态主体是物理引擎不移动的主体. 它参与碰撞检测, 但不会响应碰撞而移动. 它们通常用于属于环境的对象或不需要任何动态行为的对象.
RigidBody2D
这是实现模拟2D物理的节点. 您不直接控制 RigidBody2D , 而是您对它施加力(重力, 冲动等), 物理引擎计算得到的运动.
KinematicBody2D
提供碰撞检测的物体, 但没有物理特性. 所有移动和碰撞响应必须在代码中实现.
碰撞形状
为了检测碰撞, 必须至少为对象分配一个 Shape2D .不要改变形状的scale
CollisionShape2D(固定形状)或CollisionPolygon2D(多边形)
查找节点
获取子节点
get_node('节点'),如:get_node('Sprite')
获取兄弟节点
1.先获取父节点:get_parent()
2.获取子节点:get_parent().get_node('节点')
自定义信号
signal 信号名,如:signal my_signal
然后到脚本对应节点上找到信号并绑定
手动发送信号:
emit_signal('信号名'),如:emit_signal('my_signal')
接收信号:
会进入绑定的信号中
Area2D
它不属于物理引擎,没有专门的移动函数,需要通过修改position.x来移动。它的碰撞检测通过信号来完成,可穿过,例如吃金币。
碰撞检测取决于对方的类型,碰撞检测的信号如果对方是body(刚体一类),那么就用body_enterd,如果对方是area_enterd,那么就用areaenter
找到指定碰撞的节点,通过body.name来识别是谁碰撞
# area碰撞
func _on_Area2D_area_entered(area):
print(area.name)
# 通过$"../节点名",查找兄弟碰撞节点
var ar = $"../areaName"
# body碰撞
func _on_Area2D_body_entered(body):
print(body.name)
# 若动态生成的节点,直接通过body参数来控制,body参数即碰撞体,如body.direction
删除节点
queue_free(),默认删除自己
xxxxx.queue_free(),表示删除xxxxx节点