刚性体2d¶
Inherits: PhysicsBody2D < CollisionObject2D < Node2D < CanvasItem < Node < Object
类别: 核心
简要说明¶
由二维物理引擎控制的物体。
属性¶
-1.0 |
||
0.0 |
||
矢量2(0,0) |
||
0.0 |
||
真 |
||
假 |
||
0 |
||
0 |
||
假 |
||
1.0 |
||
-1.0 |
||
矢量2(0,0) |
||
1.0 |
||
0 |
||
假 |
||
9.8 |
方法¶
无效 |
_integrate_forces ( Physics2DDirectBodyState state ) virtual |
无效 |
add_central_force ( Vector2 force ) |
无效 |
|
无效 |
add_torque ( float torque ) |
无效 |
apply_central_impulse ( Vector2 impulse ) |
无效 |
apply_impulse ( Vector2 offset, Vector2 impulse ) |
无效 |
apply_torque_impulse ( float torque ) |
get_colliding_bodies ( ) const |
|
无效 |
set_axis_velocity ( Vector2 axis_velocity ) |
test_motion ( Vector2 motion, bool infinite_inertia=true, float margin=0.08, Physics2DTestMotionResult result=null ) |
信号¶
body_entered ( Node body )
当一个物体与这个物体接触时发出的。 contact_monitor 必须是 true
和 contacts_reported 大于 0
.
body_exited ( Node body )
当一个物体与这个物体脱离接触时发出。 contact_monitor 必须是 true
和 contacts_reported 大于 0
.
当一个物体与这个物体接触时发出的。报告碰撞形状信息。见 CollisionObject2D 有关形状索引信息。 contact_monitor 必须是 true
和 contacts_reported 大于 0
.
当一个体形与此体形接触时发出。报告碰撞形状信息。见 CollisionObject2D 有关形状索引信息。 contact_monitor 必须是 true
和 contacts_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的 position
或 linear_velocity
每一帧,甚至经常。如果你需要直接影响身体的状态,使用 _integrate_forces ,允许您直接访问物理状态。
请记住,物理体管理自己的转换,覆盖您设置的转换。因此,任何直接或间接转换(包括节点或其父节点的缩放)都将仅在编辑器中可见,并在运行时立即重置。
如果需要重写默认物理行为或在运行时添加转换,可以编写自定义的强制集成。见 custom_integrator .
属性描述¶
float angular_damp
违约 |
-1.0 |
设定器 |
设置角度阻尼(值) |
吸气剂 |
得到角阻尼 |
使身体受潮 angular_velocity .如果 -1
,车身将使用 默认角度阻尼 定义在 Project > Project Settings > Physics > 2d .
float angular_velocity
违约 |
0.0 |
设定器 |
设置角速度(值) |
吸气剂 |
得到角速度 |
物体的旋转速度。
Vector2 applied_force
违约 |
矢量2(0,0) |
设定器 |
设置施加的力(值) |
吸气剂 |
使用力()) |
物体的总作用力。
float applied_torque
违约 |
0.0 |
设定器 |
设置施加的扭矩(值) |
吸气剂 |
施加扭矩 |
车身的总作用扭矩。
float bounce
设定器 |
设置反弹(值) |
吸气剂 |
获得反弹()) |
身体的弹性。值的范围从 0
(没有弹跳)到 1
(充满弹性)。
弃用,使用 PhysicsMaterial.bounce 而是通过 physics_material_override .
bool can_sleep
违约 |
真 |
设定器 |
设置可以睡眠(值) |
吸气剂 |
你能入睡吗? |
如果 true
如果没有移动,物体将不会计算力,并将作为静止物体。当其他力通过碰撞或使用 apply_impulse 或 add_force .
bool contact_monitor
违约 |
假 |
设定器 |
设置触点监视器(值) |
吸气剂 |
_contact_monitor_enabled()是否已启用? |
如果 true
当车身与另一个刚性车身2d碰撞时,车身将发出信号。另请参见 contacts_reported .
int contacts_reported
违约 |
0 |
设定器 |
设置“已报告的最大联系人”(值) |
吸气剂 |
获取已报告的最大联系人 |
要报告的最大联系人数。
CCDMode continuous_cd
违约 |
0 |
设定器 |
设置连续碰撞检测模式(值) |
吸气剂 |
获取连续碰撞检测模式()。 |
连续碰撞检测模式。
连续碰撞检测试图预测运动物体将在何处碰撞,而不是移动它,并纠正碰撞后的运动。连续碰撞检测速度较慢,但更精确,与小而快速移动的物体碰撞的次数更少。有人造丝和成型铸造方法。见 CCDMode 有关详细信息。
bool custom_integrator
违约 |
假 |
设定器 |
设置使用自定义积分器(值) |
吸气剂 |
_是否使用自定义_积分器( |
如果 true
,此机构的内力集成被禁用。除了碰撞响应外,车身只会根据 _integrate_forces 功能。
float friction
设定器 |
设置摩擦(值) |
吸气剂 |
得到摩擦 |
身体的摩擦力。值的范围从 0
(无摩擦)至 1
(最大摩擦)。
弃用,使用 PhysicsMaterial.friction 而是通过 physics_material_override .
float gravity_scale
违约 |
1.0 |
设定器 |
设置重力标度(值) |
吸气剂 |
得到重力标度 |
乘以施加在物体上的重力。物体的重力是根据 默认重力 价值在 Project > Project Settings > Physics > 2d 和/或任何附加重力矢量 Area2D S
float inertia
设定器 |
设置惯性(值) |
吸气剂 |
获得惯性 |
物体的转动惯量。这就像质量,但对于旋转:它决定旋转物体需要多少扭矩。惯性矩通常根据质量和形状自动计算,但此函数允许您设置自定义值。设置0(或负)惯性以返回自动计算。
float linear_damp
违约 |
-1.0 |
设定器 |
设置线性阻尼(值) |
吸气剂 |
得到线性阻尼 |
使身体受潮 linear_velocity .如果 -1
,车身将使用 默认线性阻尼 在里面 Project > Project Settings > Physics > 2d .
Vector2 linear_velocity
违约 |
矢量2(0,0) |
设定器 |
设置线性速度(值) |
吸气剂 |
得到线性速度 |
物体的线速度。
float mass
违约 |
1.0 |
设定器 |
设置质量(值) |
吸气剂 |
获取质量() |
身体的质量。
Mode mode
违约 |
0 |
设定器 |
设置模式(值) |
吸气剂 |
获取_模式() |
身体的模式。见 Mode 对于可能的值。
PhysicsMaterial physics_material_override
设定器 |
设置物理材料覆盖(值) |
吸气剂 |
获取物理材料覆盖 |
bool sleeping
违约 |
假 |
设定器 |
设置睡眠(值) |
吸气剂 |
你在睡觉吗? |
如果 true
,身体正在睡觉,直到被碰撞或使用 apply_impulse 或 add_force .
float weight
违约 |
9.8 |
设定器 |
设置重量(值) |
吸气剂 |
获得重量() |
身体的重量基于它的质量和 默认重力 价值在 Project > Project Settings > Physics > 2d .
方法说明¶
void _integrate_forces ( Physics2DDirectBodyState state ) virtual
允许您读取并安全地修改对象的模拟状态。用这个代替 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_monitor 到 true
.
注: 移动对象后,此测试的结果不会立即显示。对于性能,碰撞列表每帧更新一次,并在物理步骤之前更新。考虑改用信号。
void set_axis_velocity ( Vector2 axis_velocity )
设定物体在给定轴上的速度。给定矢量轴上的速度将设置为给定的矢量长度。这对跳跃行为很有用。
bool test_motion ( Vector2 motion, bool infinite_inertia=true, float margin=0.08, Physics2DTestMotionResult result=null )
返回 true
如果在给定的向量中移动会导致碰撞。 margin
增加碰撞检测中涉及的形状的大小,以及 result
是类型的对象 Physics2DTestMotionResult ,其中包含有关碰撞的其他信息(如果有)。