RigidBody2D
Inherits: PhysicsBody2D < CollisionObject2D < Node2D < CanvasItem < Node < Object
由2D物理引擎控制的物体。
描述
该节点实现了模拟2D物理。 您不能直接控制RigidBody2D。 取而代之的是对它施加力(重力,脉冲等),然后物理模拟根据其质量,摩擦和其他物理属性来计算最终的运动。
RigidBody2D具有4种行为模式:刚性,静态,角色和运动。
注意:您不应该每隔一帧甚至经常更改RigidBody2D的位置或linear_velocity。 如果您需要直接影响物体的状态,请使用_integrate_forces,它使您可以直接访问物理状态。
还请记住,物理体管理自己的变换,它会覆盖你所设置的变换,所以任何直接或间接的变换(包括节点或父节点的缩放)都只在编辑器中可见,并在运行时立即重置。因此,任何直接或间接的变换(包括节点或其父体的缩放)都将只在编辑器中可见,并在运行时立即重置。
如果你需要覆盖默认的物理行为或在运行时添加一个转换,你可以写一个自定义的力集成。请参阅 custom_integrator。
bool custom_integrator
Default false
Setter set_use_custom_integrator(value)
Getter is_using_custom_integrator()
如果为真,则该物体的内部合力被禁用。除了碰撞响应外,该机体只会按照_integrate_forces函数的决定移动。
void _integrate_forces ( Physics2DDirectBodyState state ) virtual
允许你读取并安全地修改对象的模拟状态。如果你需要直接改变物体的位置或其他物理属性,请使用它来代替Node._physics_process。默认情况下,它除了通常的物理行为外,还可以工作,但custom_integrator允许你禁用默认行为,并为一个体编写自定义的合力。
void apply_impulse ( Vector2 offset, Vector2 impulse )
向物体施加位置脉冲。 脉冲与时间无关! 每帧都施加一个脉冲,就会产生与帧数相关的力。 因此,仅在模拟一次性冲击时才应使用它(否则请使用“ _force”功能)。 该位置使用全局坐标系的旋转,但以对象的原点为中心。
bool test_motion ( Vector2 motion, bool infinite_inertia=true, float margin=0.08, Physics2DTestMotionResult result=null )
如果在给定向量中移动会导致碰撞,则返回true。边距增加了碰撞检测中涉及的形状的大小,结果是一个类型为Physics2DTestMotionResult的对象,它包含关于碰撞的额外信息(如果存在碰撞的话)。