使用PinJoint2D实现可中心旋转的物体

场景搭建
实现可中心旋转的物体需要用到PinJoin2D
节点,该节点需要链接两个节点,一个中心点,一个旋转物体
中心点使用StaticBody2D
与CollisionShape2D
的组合即可
旋转物体可以使用RigidBody2D
, 然后创建一个Polygon2D
用于绘制一个多边形
RigidBody2D可以设置以下属性
- Mass: 可以用于控制旋转快慢,值越大转得越慢
- Gravity Scale: 用于设置物体的重力

创建一个CollisionShape2D
为这个多边形添加碰撞体积, 使用脚本赋值
extends RigidBody2D
func _ready():
$CollisionPolygon2D.polygon = $Polygon2D.polygon
点击Pinjoin2D分别设置NodeA以及NodeB属性

创建物体来触发旋转效果
随意创建一个物体,让其落到旋转物体上测试旋转效果

VisibilityNotifier2D可以用于当物体出屏幕外之后对其进行销毁,链接screen_exited信号
extends RigidBody2D
func _on_visiblityNotifier2D_screen_exited():
queue_free()
接下来在主场景中加载上述物体,检测到鼠标按键之后创建一个新的物体落下
extends Node2D
var cube = load("res://cube.tscn")
func _input(event):
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and event.is_pressed():
var c = cube.instance()
c.position = event.position
add_child(c)