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

实现效果

场景搭建

实现可中心旋转的物体需要用到PinJoin2D节点,该节点需要链接两个节点,一个中心点,一个旋转物体

中心点使用StaticBody2DCollisionShape2D的组合即可

旋转物体可以使用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)