按照下图场景树所示构造一个场景:
- 节点的名称即为节点类型
- 红色方框分别对应着每个
CollisionShape2D
中Shape
(都是RectangleShape2D
)的范围
注意: 为了避免不必要的性能消耗,RigidBody
以及RigidBody2D
默认是不开启碰撞检测的,所以需要碰撞检测必须做两件事:
- 将
Contact Monitor
设为true
(开启碰撞检测) - 将
Contact Roported
设为一个大于0的值(返回碰撞结果最大数量)
下面是"RigidBody2D"上脚本的内容
“Body.gd” 把回调方法 on_body_entered
和on_body_exited
链接到RigidBody2D
的信号body_entered
和body_exited
上
extends RigidBody2D
func _ready():
connect("body_entered",self,"on_body_entered")
connect("body_exited",self,"on_body_exited")
func on_body_entered(node):
print("我是一个:" + name + ",我刚撞上一个" + node.name)
func on_body_exited(node):
print("我是一个:" + name + ",我撞完一个" + node.name)
输出结果
我是一个:RigidBody2D,我刚撞上一个StaticBody2D