碰撞物体

Area2D
Area2D 节点提供 检测 和 影响 . 它们可以检测物体何时重叠, 并在物体进入或离开时发出信号. Area2D 也可用于覆盖物理属性, 例如一定区域内的重力或阻尼.

StaticBody2D
静态主体是物理引擎不移动的主体. 它参与碰撞检测, 但不会响应碰撞而移动. 它们通常用于属于环境的对象或不需要任何动态行为的对象.

RigidBody2D
这是实现模拟2D物理的节点. 您不直接控制 RigidBody2D , 而是您对它施加力(重力, 冲动等), 物理引擎计算得到的运动.

KinematicBody2D
提供碰撞检测的物体, 但没有物理特性. 所有移动和碰撞响应必须在代码中实现.

碰撞形状

为了检测碰撞, 必须至少为对象分配一个 Shape2D .不要改变形状的scale
CollisionShape2D(固定形状)或CollisionPolygon2D(多边形)

查找节点

  1. 获取子节点
  2. get_node('节点'),如:get_node('Sprite')
  3. 获取兄弟节点
  4. 1.先获取父节点:get_parent()
  5. 2.获取子节点:get_parent().get_node('节点')

自定义信号

image.png

signal 信号名,如:signal my_signal
然后到脚本对应节点上找到信号并绑定

手动发送信号:
emit_signal('信号名'),如:emit_signal('my_signal')
接收信号:
会进入绑定的信号中

Area2D

它不属于物理引擎,没有专门的移动函数,需要通过修改position.x来移动。它的碰撞检测通过信号来完成,可穿过,例如吃金币。
碰撞检测取决于对方的类型,碰撞检测的信号如果对方是body(刚体一类),那么就用body_enterd,如果对方是area_enterd,那么就用areaenter
image.png

找到指定碰撞的节点,通过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节点