Physics2DServer¶
Inherits: Object
用于底层2D物理访问服务的接口。
描述¶
Physics2DServer 是负责所有 2D 物理的服务。它可以创建多种物理对象,但不会将它们插入到节点树中。
方法¶
枚举¶
enum SpaceParameter:
SPACE_PARAM_CONTACT_RECYCLE_RADIUS = 0 --- 常数,用于设置/获取一对物体在其碰撞状态被重新计算之前的最大移动距离。
SPACE_PARAM_CONTACT_MAX_SEPARATION = 1 --- 常数,用于设置/获取形状在被视为分离之前与另一形状之间的最大距离。
SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION = 2 --- 常数,用来设置/得到一个形状在被认为碰撞之前穿透另一个形状的最大距离。
SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD = 3 --- 常数,用于设置/获取活跃的阈值线速度。一个被标记为线性速度和角速度都可能不活跃的物体将在给定的时间后进入睡眠状态。
SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD = 4 --- 常数,用于设置/获取活动的阈值角速度。一个被标记为线性和角速度都可能不活跃的物体,在给定的时间后将会进入睡眠状态。
SPACE_PARAM_BODY_TIME_TO_SLEEP = 5 --- 常数来设置/获得最大的活动时间。一个被标记为线速度和角速度都可能不活动的物体,在这个时间之后将被置入睡眠状态。
SPACE_PARAM_CONSTRAINT_DEFAULT_BIAS = 6 --- 常数,用于设置/获取所有物理约束的默认求解器偏置。解算器偏差是一个控制两个物体在违反约束后 "反弹 "程度的因素,以避免由于数值不精确而使它们处于这种状态。
enum ShapeType:
SHAPE_LINE = 0 --- 这是创建线型形状的常量。线条形状是一条具有原点和法线的无限长直线。因此,它可以被用于前后检查。
SHAPE_RAY = 1
SHAPE_SEGMENT = 2 --- 这是创建线段形状的常量。线段形状是一条从A点到B点的线,它可以被检查交点。
SHAPE_CIRCLE = 3 --- 这是创建圆形的常量。一个圆的形状只有一个半径。它可以用于交点和内/外侧检查。
SHAPE_RECTANGLE = 4 --- 这是用于创建矩形形状的常量。矩形形状是由宽度和高度定义的。它可以用于交点和内/外侧检查。
SHAPE_CAPSULE = 5 --- 这是创建胶囊形状的常量。一个胶囊形状由一个半径和一个长度定义。它可以用于交点和内/外侧检查。
SHAPE_CONVEX_POLYGON = 6 --- 这是用于创建凸多边形的常量。一个多边形是由一个点的列表定义的。它可以用于交点和内/外侧检查。与CollisionPolygon2D.polygon属性不同,用shape_set_data修改的多边形并不验证所提供的点的形式是一个凸形多边形。
SHAPE_CONCAVE_POLYGON = 7 --- 这是创建凹形多边形的常量。一个多边形是由一个点的列表定义的。它可以用于交叉点检查,但不能用于内/外侧检查。
SHAPE_CUSTOM = 8 --- 这个常数是由引擎内部使用的。任何试图创建这种形状的行为都会导致错误。
enum AreaParameter:
AREA_PARAM_GRAVITY = 0 --- 在一个地区设置/获得重力强度的常数。
AREA_PARAM_GRAVITY_VECTOR = 1 --- 在一个区域内设置/获取重力向量/中心的常数。
AREA_PARAM_GRAVITY_IS_POINT = 2 --- 常数用于设置/获取一个区域的重力向量是一个方向,还是一个中心点。
AREA_PARAM_GRAVITY_DISTANCE_SCALE = 3 --- 常数,用于设置/获取一个区域的点重力的衰减系数。这个值越大,重力的强度随着距离的平方下降得越快。
AREA_PARAM_GRAVITY_POINT_ATTENUATION = 4 --- 这个常数用于设置/获取点重力的衰减因子。它已经被AREA_PARAM_GRAVITY_DISTANCE_SCALE所取代了。
AREA_PARAM_LINEAR_DAMP = 5 --- 常数,用于设置/获取一个区域的线性阻尼系数。
AREA_PARAM_ANGULAR_DAMP = 6 --- 常数,用于设置/获取一个区域的角度阻尼系数。
AREA_PARAM_PRIORITY = 7 --- 常数,用于设置/获取一个区域的优先级(处理顺序)。
enum AreaSpaceOverrideMode:
AREA_SPACE_OVERRIDE_DISABLED = 0 --- 这个区域不影响重力/阻尼。这些一般都是只存在于检测碰撞的区域,以及进入或离开它们的物体。
AREA_SPACE_OVERRIDE_COMBINE = 1 --- 此区域把它的重力/阻尼加到目前已经计算过的对象上。这样一来,许多重叠的区域可以结合它们的物理运算来产生有趣的效果。
AREA_SPACE_OVERRIDE_COMBINE_REPLACE = 2 --- 这个区域把它的重力/阻尼加到迄今为止已经计算出来的任何东西上。然后停止考虑其余的区域,甚至默认的区域。
AREA_SPACE_OVERRIDE_REPLACE = 3 --- 这个区域取代了任何重力/阻尼,甚至是默认的,并停止考虑其余的区域。
AREA_SPACE_OVERRIDE_REPLACE_COMBINE = 4 --- 这个区域取代了到目前为止计算的任何重力/阻尼,但继续计算其余的区域,直到默认的区域。
enum BodyMode:
BODY_MODE_STATIC = 0 --- StaticBody 的常量。
BODY_MODE_KINEMATIC = 1 --- KinematicBody 的常数。
BODY_MODE_RIGID = 2 --- RigidBody 的常数。
BODY_MODE_CHARACTER = 3 --- 角色模式下刚体的常数。在这种模式下,物体不能旋转,只有它的线速度受物理运算影响。
enum BodyParameter:
BODY_PARAM_BOUNCE = 0 --- 常数,用于设置/获取物体的反弹系数。
BODY_PARAM_FRICTION = 1 --- 常数,用于设置/获取一个物体的摩擦力。
BODY_PARAM_MASS = 2 --- 设置/获取一个物体的质量的常数。
BODY_PARAM_INERTIA = 3 --- 常数,用于设置/获取一个物体的惯性。
BODY_PARAM_GRAVITY_SCALE = 4 --- 常数,用于设置/获取一个物体的重力倍数。
BODY_PARAM_LINEAR_DAMP = 5 --- 常数,用于设置/获取一个物体的线性阻尼系数。
BODY_PARAM_ANGULAR_DAMP = 6 --- 常数,用于设置/获取一个物体的角度阻尼系数。
BODY_PARAM_MAX = 7 --- 表示BodyParameter枚举的大小。
enum BodyState:
BODY_STATE_TRANSFORM = 0 --- 常数,用于设置/获取物体的当前变换矩阵。
BODY_STATE_LINEAR_VELOCITY = 1 --- 常数,用于设置/获取物体的当前线速度。
BODY_STATE_ANGULAR_VELOCITY = 2 --- 常数,用于设置/获取物体的当前角速度。
BODY_STATE_SLEEPING = 3 --- 常数,用于使物体沉睡/唤醒,或得到它是否在沉睡。
BODY_STATE_CAN_SLEEP = 4 --- 常量,用于设置/获取物体是否可以休眠。
enum JointType:
JOINT_PIN = 0 --- 常数,用于创造针状关节。
JOINT_GROOVE = 1 --- 常数,用于创造槽型关节。
JOINT_DAMPED_SPRING = 2 --- 常数,用于创造有阻尼的弹簧关节。
enum JointParam:
JOINT_PARAM_BIAS = 0
JOINT_PARAM_MAX_BIAS = 1
JOINT_PARAM_MAX_FORCE = 2
enum DampedStringParam:
DAMPED_STRING_REST_LENGTH = 0 --- 设定弹簧关节的静止长度。当拉开时,关节将总是试图回到这个长度。
DAMPED_STRING_STIFFNESS = 1 --- 设置弹簧接头的刚度。该关节施加的力等于刚度乘以离其静止长度的距离。
DAMPED_STRING_DAMPING = 2 --- 设置弹簧接头的阻尼比率。值为0表示无阻尼弹簧,而1导致系统尽可能快地达到平衡(临界阻尼)。
enum CCDMode:
CCD_MODE_DISABLED = 0 --- 禁用连续碰撞检测。这是检测物体碰撞的最快方法,但可能会错过小的、快速移动的物体。
CCD_MODE_CAST_RAY = 1 --- 通过射线投射实现连续的碰撞检测。它比shapecasting更快,但不够精确。
CCD_MODE_CAST_SHAPE = 2 --- 通过形变实现连续的碰撞检测。它是最慢的CCD方法,也是最精确的。
enum AreaBodyStatus:
AREA_BODY_ADDED = 0 --- 当对象进入其形状之一时,第一个参数和区域回调函数接收的值。
AREA_BODY_REMOVED = 1 --- 当对象退出其形状之一时,第一个参数和区域回调函数接收的值。
enum ProcessInfo:
INFO_ACTIVE_OBJECTS = 0 --- 常量,用来获取未处于睡眠状态的对象的数量。
INFO_COLLISION_PAIRS = 1 --- 常数,用以获取可能的碰撞数。
INFO_ISLAND_COUNT = 2 --- 常量,用以获取可能发生碰撞的空间区域数。
方法说明¶
void area_add_shape ( RID area, RID shape, Transform2D transform=Transform2D( 1, 0, 0, 1, 0, 0 ), bool disabled=false )
向区域添加一个形状,以及一个变换矩阵。形状通常通过它们的索引来引用,因此您应该跟踪哪个形状具有给定的索引。
将区域分配给Object的子类,因此它可以存在于节点树中。
void area_clear_shapes ( RID area )
从一个区域移除所有形状。它不会删除形状,因此它们可以稍后重新分配。
RID area_create ( )
创建一个 Area2D。用这个方法创建了一个Area2D后,使用area_set_space将其分配给一个空间,以便在物理世界中使用创建的Area2D。
获取区域分配给的对象的实例ID。
Variant area_get_param ( RID area, AreaParameter param ) const
返回区域参数值。有关可用参数的列表,请参阅AreaParameter。
返回区域的第n个形状的RID。
返回分配给区域的形状数量。
Transform2D area_get_shape_transform ( RID area, int shape_idx ) const
返回区域内形状的变换矩阵。
返回分配给该区域的空间。
AreaSpaceOverrideMode area_get_space_override_mode ( RID area ) const
返回该区域的空间覆盖模式。
Transform2D area_get_transform ( RID area ) const
返回区域的变换矩阵。
从区域中移除一个形状。它不会删除形状,因此可以稍后重新分配。
将区域分配给一个或多个物理层。
设置区域将监控的物理层。
设置当任何主体/区域进入或退出该区域时调用的函数。这个回调函数将被任何与区域交互的对象调用,并接受5个参数:
1: AREA_BODY_ADDED或AREA_BODY_REMOVED,取决于对象是否进入或退出该区域。
2:进入/退出该区域对象的RID。
3:进入/退出该区域对象的实例ID。
4:进入/离开该区域的物体的形状指数。
5:物体进入/离开区域的形状指数。
void area_set_param ( RID area, AreaParameter param, Variant value )
设置区域参数的值。有关可用参数的列表,请参阅 AreaParameter。
用另一种形状代替一种形状。旧的形状由它的索引选择,新的形状由它的RID选择。
在区域中禁用一个给定的形状。
void area_set_shape_transform ( RID area, int shape_idx, Transform2D transform )
设置区域形状的变换矩阵。
为该区域指定一个空间。
void area_set_space_override_mode ( RID area, AreaSpaceOverrideMode mode )
为该区域设置空间覆盖模式。请参阅AreaSpaceOverrideMode获取可用模式的列表。
void area_set_transform ( RID area, Transform2D transform )
设置区域的变换矩阵。
将一个物体添加到免于碰撞的物体列表中。
在施加的力和扭矩上添加一个有作用点的力。与body_apply_impulse一样,力和物体原点的偏移量都在全局坐标中。力与冲量的不同之处在于,虽然两者都是力,但冲量在被施加后会自动清除。
void body_add_shape ( RID body, RID shape, Transform2D transform=Transform2D( 1, 0, 0, 1, 0, 0 ), bool disabled=false )
添加一个形状到物体,以及一个变换矩阵。形状通常通过它们的索引来引用,因此您应该跟踪哪个形状具有给定的索引。
在施加的力和扭矩上增加一个有作用点的冲量。力和物体原点的偏移量都在全局坐标中。
将区域分配给Object的子类,因此它可以存在于节点树中。
void body_clear_shapes ( RID body )
从物体上移除所有碰撞形状。
RID body_create ( )
创建一个物理体。
返回物体所属的物理层或层。
返回物体可以碰撞的物理层或层。
返回连续碰撞检测模式。
Physics2DDirectBodyState body_get_direct_state ( RID body )
返回物体的 Physics2DDirectBodyState。如果该物体已被销毁或者已被移出物理空间,则返回 null
。
返回可报告的最大接触数。参阅body_set_max_contacts_reported。
返回物体模式。
获取区域分配给的对象的实例ID。
float body_get_param ( RID body, BodyParameter param ) const
返回物体参数的值。请参阅BodyParameter获取可用参数列表。
返回body的第n个碰撞形状的RID。
返回分配给物体的碰撞形状数量。
返回物体碰撞形状的元数据。
Transform2D body_get_shape_transform ( RID body, int shape_idx ) const
返回物体碰撞形状的变换矩阵。
返回分配给物体的空间的RID。
返回物体的状态。
返回一个body是否使用回调函数来计算它自己的物理值(参阅body_set_force_integration_callback方法)。
从免于碰撞的物体列表中移除一个物体。
从物体上移除一个碰撞形状。碰撞形状不会被从内存中删除,所以它可以在之后被重复使用。
设置轴速度。给定向量轴上的速度将被设置为给定向量长度。这对跳跃行为很有用。
设置物体所属的物理层或层。
设置物理层或身体可以碰撞的层。
设置使用CCDMode常量之一的连续碰撞检测模式。
连续碰撞检测试图预测一个运动体将在哪里发生碰撞,而不是移动它并在它发生碰撞时纠正其运动。
void body_set_force_integration_callback ( RID body, Object receiver, String method, Variant userdata=null )
设置用于物体物理运算的函数,如果该物体允许的话,参阅body_set_omit_force_integration。
设置要报告的最大关联数。物体可以保存与其他物体的关联日志,当最大数量的关联报告的数字大于 0 时才启用此功能。
使用BodyMode常量之一设置body模式。
设置一个物体是否使用回调函数来计算它自己的物理(参阅 body_set_force_integration_callback)。
void body_set_param ( RID body, BodyParameter param, float value )
设置主体参数。请参阅BodyParameter获取可用参数列表。
用一个给定的物体形状代替另一个。旧的形状是通过其索引选择的,新的是通过其RID选择的。
如果enable
为true
,则在body上启用单向碰撞。
如果disable
为true
,则在body中禁用形状。
设置一个体中的形状的元数据。这个元数据与Object.set_meta不同,可以在形状查询中检索。
void body_set_shape_transform ( RID body, int shape_idx, Transform2D transform )
设置物体形状的变换矩阵。
给物体分配一个空间(参阅space_create)。
使用 BodyState 常量之一设置物体状态。
请注意,该方法不会立即生效。状态将在下一个物理帧发生变化。
bool body_test_motion ( RID body, Transform2D from, Vector2 motion, bool infinite_inertia, float margin=0.08, Physics2DTestMotionResult result=null, bool exclude_raycast_shapes=true, Array exclude=[ ] )
如果从空间中的给定点沿给定方向移动会导致碰撞,则返回 true
。边距增加了碰撞检测中涉及的形状的大小。 通过返回Physics2DTestMotionResult 可以附加信息。
RID capsule_shape_create ( )
RID circle_shape_create ( )
RID concave_polygon_shape_create ( )
RID convex_polygon_shape_create ( )
在两个体之间创建一个阻尼弹簧关节。如果没有指定,第二个体将被假定为关节本身。
float damped_string_joint_get_param ( RID joint, DampedStringParam param ) const
返回阻尼弹簧关节参数值。
void damped_string_joint_set_param ( RID joint, DampedStringParam param, float value )
设置阻尼弹簧关节参数。参阅DampedStringParam获取可用参数的列表。
void free_rid ( RID rid )
销毁由 Physics2DServer 创建的任何对象。如果传递的 RID 不是 Physics2DServer 可以创建的对象之一,则会向控制台发送错误。
int get_process_info ( ProcessInfo process_info )
返回关于2D物理引擎当前状态的信息。有关可用状态列表,请参阅ProcessInfo。
RID groove_joint_create ( Vector2 groove1_a, Vector2 groove2_a, Vector2 anchor_b, RID body_a, RID body_b )
在两个物体之间形成凹槽连接。如果没有指定,则假定物体是关节本身。
float joint_get_param ( RID joint, JointParam param ) const
返回关节参数的值。
返回一个关节的类型(见JointType)。
void joint_set_param ( RID joint, JointParam param, float value )
设置关节参数。有关可用参数的列表,请参阅JointParam。
RID line_shape_create ( )
在两个体之间创建一个针状关节。如果没有指定,第二个物体将被假定为关节本身。
RID ray_shape_create ( )
RID rectangle_shape_create ( )
RID segment_shape_create ( )
void set_active ( bool active )
激活或停用2D物理引擎。
void set_collision_iterations ( int iterations )
设置计算碰撞体速度的迭代次数。迭代次数越多,碰撞就越准确。但是,更大量的迭代需要更多的 CPU 能力,这会降低性能。默认值为 8
。
返回形状数据。
返回一个形状的类型(参阅ShapeType)。
设置定义形状和大小的形状数据。要传递的数据取决于创建的形状的类型shape_get_type。
RID space_create ( )
创建一个空间。空间是物理引擎的参数集合,可以分配给区域或主体。它可以通过area_set_space分配给一个区域,或者通过body_set_space分配给一个主体。
Physics2DDirectSpaceState space_get_direct_state ( RID space )
返回空间的状态,Physics2DDirectSpaceState。此对象可用于进行碰撞/相交查询。
float space_get_param ( RID space, SpaceParameter param ) const
返回空间参数的值。
返回该空间是否是活动的。
将空间标记为活动空间。它不会有效果,除非它被分配到一个区域或物体。
void space_set_param ( RID space, SpaceParameter param, float value )
设置空间参数的值。参阅SpaceParameter获取可用参数列表。