刚性体2d

Inherits: PhysicsBody2D < CollisionObject2D < Node2D < CanvasItem < Node < Object

类别: 核心

简要说明

由二维物理引擎控制的物体。

方法

无效

_integrate_forces ( Physics2DDirectBodyState state ) virtual

无效

add_central_force ( Vector2 force )

无效

add_force ( Vector2 offset, Vector2 force )

无效

add_torque ( float torque )

无效

apply_central_impulse ( Vector2 impulse )

无效

apply_impulse ( Vector2 offset, Vector2 impulse )

无效

apply_torque_impulse ( float torque )

Array

get_colliding_bodies ( ) const

无效

set_axis_velocity ( Vector2 axis_velocity )

bool

test_motion ( Vector2 motion, bool infinite_inertia=true, float margin=0.08, Physics2DTestMotionResult result=null )

信号

  • body_entered ( Node body )

当一个物体与这个物体接触时发出的。 contact_monitor 必须是 truecontacts_reported 大于 0 .

  • body_exited ( Node body )

当一个物体与这个物体脱离接触时发出。 contact_monitor 必须是 truecontacts_reported 大于 0 .

  • body_shape_entered ( int body_id, Node body, int body_shape, int local_shape )

当一个物体与这个物体接触时发出的。报告碰撞形状信息。见 CollisionObject2D 有关形状索引信息。 contact_monitor 必须是 truecontacts_reported 大于 0 .

  • body_shape_exited ( int body_id, Node body, int body_shape, int local_shape )

当一个体形与此体形接触时发出。报告碰撞形状信息。见 CollisionObject2D 有关形状索引信息。 contact_monitor 必须是 truecontacts_reported 大于 0 .

  • sleeping_state_changed ( )

发射时间 sleeping 变化。

枚举

枚举 Mode

  • MODE_RIGID = 0 ---刚性模式。身体表现为一个物理对象。它与其他物体碰撞,并对施加在它上面的力作出反应。这是默认模式。

  • MODE_STATIC = 1 ---静态模式。身体的行为就像 StaticBody2D 不会移动。

  • MODE_CHARACTER = 2 ---字符模式。类似 MODE_RIGID 但身体不能旋转。

  • MODE_KINEMATIC = 3 ---运动模式。身体的行为就像 KinematicBody2D ,必须按代码移动。

枚举 CCDMode

  • CCD_MODE_DISABLED = 0 ---禁用连续碰撞检测。这是检测身体碰撞的最快方法,但可能会错过小的、快速移动的物体。

  • CCD_MODE_CAST_RAY = 1 ---使用光线投射启用连续碰撞检测。这比造型铸造快,但精度较低。

  • CCD_MODE_CAST_SHAPE = 2 ---使用形状转换启用连续碰撞检测。这是最慢和最精确的CCD方法。

描述

该节点实现模拟二维物理。您不能直接控制刚体2d。相反,你对它施加力(重力、脉冲等),物理模拟根据它的质量、摩擦和其他物理特性计算产生的运动。

刚性体2d具有4种行为 mode S:刚性、静态、特征和运动学。

注: 你不应该改变一个僵化的2d的 positionlinear_velocity 每一帧,甚至经常。如果你需要直接影响身体的状态,使用 _integrate_forces ,允许您直接访问物理状态。

请记住,物理体管理自己的转换,覆盖您设置的转换。因此,任何直接或间接转换(包括节点或其父节点的缩放)都将仅在编辑器中可见,并在运行时立即重置。

如果需要重写默认物理行为或在运行时添加转换,可以编写自定义的强制集成。见 custom_integrator .

属性描述

违约

-1.0

设定器

设置角度阻尼(值)

吸气剂

得到角阻尼

使身体受潮 angular_velocity .如果 -1 ,车身将使用 默认角度阻尼 定义在 Project > Project Settings > Physics > 2d .

违约

0.0

设定器

设置角速度(值)

吸气剂

得到角速度

物体的旋转速度。

违约

矢量2(0,0)

设定器

设置施加的力(值)

吸气剂

使用力())

物体的总作用力。

违约

0.0

设定器

设置施加的扭矩(值)

吸气剂

施加扭矩

车身的总作用扭矩。

设定器

设置反弹(值)

吸气剂

获得反弹())

身体的弹性。值的范围从 0 (没有弹跳)到 1 (充满弹性)。

弃用,使用 PhysicsMaterial.bounce 而是通过 physics_material_override .

违约

设定器

设置可以睡眠(值)

吸气剂

你能入睡吗?

如果 true 如果没有移动,物体将不会计算力,并将作为静止物体。当其他力通过碰撞或使用 apply_impulseadd_force .

  • bool contact_monitor

违约

设定器

设置触点监视器(值)

吸气剂

_contact_monitor_enabled()是否已启用?

如果 true 当车身与另一个刚性车身2d碰撞时,车身将发出信号。另请参见 contacts_reported .

  • int contacts_reported

违约

0

设定器

设置“已报告的最大联系人”(值)

吸气剂

获取已报告的最大联系人

要报告的最大联系人数。

违约

0

设定器

设置连续碰撞检测模式(值)

吸气剂

获取连续碰撞检测模式()。

连续碰撞检测模式。

连续碰撞检测试图预测运动物体将在何处碰撞,而不是移动它,并纠正碰撞后的运动。连续碰撞检测速度较慢,但更精确,与小而快速移动的物体碰撞的次数更少。有人造丝和成型铸造方法。见 CCDMode 有关详细信息。

  • bool custom_integrator

违约

设定器

设置使用自定义积分器(值)

吸气剂

_是否使用自定义_积分器(

如果 true ,此机构的内力集成被禁用。除了碰撞响应外,车身只会根据 _integrate_forces 功能。

设定器

设置摩擦(值)

吸气剂

得到摩擦

身体的摩擦力。值的范围从 0 (无摩擦)至 1 (最大摩擦)。

弃用,使用 PhysicsMaterial.friction 而是通过 physics_material_override .

违约

1.0

设定器

设置重力标度(值)

吸气剂

得到重力标度

乘以施加在物体上的重力。物体的重力是根据 默认重力 价值在 Project > Project Settings > Physics > 2d 和/或任何附加重力矢量 Area2D S

设定器

设置惯性(值)

吸气剂

获得惯性

物体的转动惯量。这就像质量,但对于旋转:它决定旋转物体需要多少扭矩。惯性矩通常根据质量和形状自动计算,但此函数允许您设置自定义值。设置0(或负)惯性以返回自动计算。

违约

-1.0

设定器

设置线性阻尼(值)

吸气剂

得到线性阻尼

使身体受潮 linear_velocity .如果 -1 ,车身将使用 默认线性阻尼 在里面 Project > Project Settings > Physics > 2d .

违约

矢量2(0,0)

设定器

设置线性速度(值)

吸气剂

得到线性速度

物体的线速度。

违约

1.0

设定器

设置质量(值)

吸气剂

获取质量()

身体的质量。

违约

0

设定器

设置模式(值)

吸气剂

获取_模式()

身体的模式。见 Mode 对于可能的值。

设定器

设置物理材料覆盖(值)

吸气剂

获取物理材料覆盖

违约

设定器

设置睡眠(值)

吸气剂

你在睡觉吗?

如果 true ,身体正在睡觉,直到被碰撞或使用 apply_impulseadd_force .

违约

9.8

设定器

设置重量(值)

吸气剂

获得重量()

身体的重量基于它的质量和 默认重力 价值在 Project > Project Settings > Physics > 2d .

方法说明

允许您读取并安全地修改对象的模拟状态。用这个代替 Node._physics_process 如果你需要直接改变身体的 position 或其他物理性质。默认情况下,除了通常的物理行为外,它还可以工作,但是 custom_integrator 允许您禁用默认行为并为主体编写自定义力集成。

  • void add_central_force ( Vector2 force )

在不影响旋转的情况下添加恒定的方向力。

向主体添加定位力。力和与物体原点的偏移都在全局坐标中。

  • void add_torque ( float torque )

增加一个恒定的旋转力。

  • void apply_central_impulse ( Vector2 impulse )

在不影响旋转的情况下应用定向脉冲。

对身体施加定位脉冲。冲动与时间无关!施加一个脉冲,每帧都会产生一个与帧速率相关的力。因此,只能在模拟一次性影响时使用(否则使用“力”功能)。位置使用全局坐标系的旋转,但以对象的原点为中心。

  • void apply_torque_impulse ( float torque )

对身体施加旋转脉冲。

  • Array get_colliding_bodies ( ) const

返回与此实体碰撞的实体列表。使用 contacts_reported 设置报告的最大数量。您还必须设置 contact_monitortrue .

注: 移动对象后,此测试的结果不会立即显示。对于性能,碰撞列表每帧更新一次,并在物理步骤之前更新。考虑改用信号。

  • void set_axis_velocity ( Vector2 axis_velocity )

设定物体在给定轴上的速度。给定矢量轴上的速度将设置为给定的矢量长度。这对跳跃行为很有用。

返回 true 如果在给定的向量中移动会导致碰撞。 margin 增加碰撞检测中涉及的形状的大小,以及 result 是类型的对象 Physics2DTestMotionResult ,其中包含有关碰撞的其他信息(如果有)。