Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
CollisionObject2D¶
继承: Node2D < CanvasItem < Node < Object
派生: Area2D, PhysicsBody2D
2D 物理对象的抽象基类。
描述¶
2D 物理对象的抽象基类。CollisionObject2D 能够容纳任意数量的 Shape2D 用作碰撞形状。每个形状必须分配给一个形状所有者。形状所有者不是节点,也不会出现在编辑器中,但可以通过代码使用 shape_owner_*
方法访问。
注意:仅支持相同画布中不同对象的碰撞(Viewport 画布或 CanvasLayer)。不同画布中的对象之间的碰撞行为是未定义的。
属性¶
|
||
|
||
|
||
|
||
|
方法¶
信号¶
input_event ( Node viewport, InputEvent event, int shape_idx )
当输入事件发生时发出。要求 input_pickable 为 true
并且至少设置了一个 collision_layer 位。详见 _input_event。
mouse_entered ( )
当鼠标指针进入该对象的任何形状时发出。要求 input_pickable 为 true
并且至少设置了一个 collision_layer 位。请注意,在单个 CollisionObject2D 中的不同形状之间移动,不会导致发出该信号。
注意:由于缺少连续的碰撞检测,如果鼠标移动得足够快并且 CollisionObject2D 的区域很小,则该信号可能不会按预期的顺序发出。如果另一个 CollisionObject2D 与所讨论的 CollisionObject2D 重叠,则也可能不会发出该信号。
mouse_exited ( )
当鼠标指针离开该对象的所有形状时发出。要求 input_pickable 为 true
并且至少设置了一个 collision_layer 位。请注意,在单个 CollisionObject2D 中的不同形状之间移动,不会导致发出该信号。
注意:由于缺少连续的碰撞检测,如果鼠标移动得足够快并且 CollisionObject2D 的区域很小,则该信号可能不会按预期的顺序发出。如果另一个 CollisionObject2D 与所讨论的 CollisionObject2D 重叠,则也可能不会发出该信号。
mouse_shape_entered ( int shape_idx )
当鼠标指针进入该实体的任何形状或从一种形状移动到另一种形状时发出。shape_idx
是新进入的 Shape2D 的子索引。要求 input_pickable 为 true
并且至少设置一个 collision_layer 位。
mouse_shape_exited ( int shape_idx )
当鼠标指针离开该实体的任何形状时发出。shape_idx
是退出的 Shape2D 的子索引。要求 input_pickable 为 true
并且至少设置一个 collision_layer 位。
枚举¶
enum DisableMode:
DisableMode DISABLE_MODE_REMOVE = 0
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,从物理仿真中移除,停止与此 CollisionObject2D 的所有物理交互。
当该 Node 再次被处理时,会自动重新加入到物理仿真中。
DisableMode DISABLE_MODE_MAKE_STATIC = 1
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,使物体进入静态模式。不影响 Area2D。处于静态模式的 PhysicsBody2D 不会受到力和其他物体的影响。
当该 Node 再次被处理时,会自动将 PhysicsBody2D 设置回其原始模式。
DisableMode DISABLE_MODE_KEEP_ACTIVE = 2
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,不影响物理仿真。
属性说明¶
int collision_layer = 1
此 CollisionObject2D 所在的物理层。碰撞对象可以存在于 32 个不同层中的一个或多个中。另见 collision_mask。
注意:只有当对象 B 在对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层与掩码》。
int collision_mask = 1
此 CollisionObject2D 扫描的物理层。碰撞对象可以扫描 32 个不同层中的一个或多个。另见 collision_layer。
注意:只有当对象 B 在对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层与掩码》。
float collision_priority = 1.0
发生穿透时用于解决碰撞的优先级。优先级越高,对物体的穿透度就越低。例如,可以用来防止玩家突破关卡的边界。
DisableMode disable_mode = 0
void set_disable_mode ( DisableMode value )
DisableMode get_disable_mode ( )
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,定义物理行为。有关不同模式的更多详细信息,请参阅 DisableMode。
bool input_pickable = true
如果为 true
,则该对象是可拾取的。可拾取的对象可以检测鼠标指针的进入/离开,鼠标位于其中时,就会报告输入事件。要求至少设置一个 collision_layer 位。
方法说明¶
void _input_event ( Viewport viewport, InputEvent event, int shape_idx ) virtual
接收未处理的 InputEvent。shape_idx
是被点击的 Shape2D 的子索引。连接到 input_event 即可轻松获取这些事件。
注意:_input_event 要求 input_pickable 为 true
,并且至少要设置一个 collision_layer 位。
void _mouse_enter ( ) virtual
当鼠标指针进入该实体的任何形状时调用。要求 input_pickable 为 true
并且至少设置了一个 collision_layer 位。请注意,在单个 CollisionObject2D 中的不同形状之间移动,不会导致该函数被调用。
void _mouse_exit ( ) virtual
当鼠标指针退出该实体的所有形状时调用。要求 input_pickable 为 true
并且至少设置了一个 collision_layer 位。请注意,在单个 CollisionObject2D 中的不同形状之间移动,不会导致该函数被调用。
void _mouse_shape_enter ( int shape_idx ) virtual
当鼠标指针进入该实体的任何形状或从一个形状移动到另一个形状时调用。shape_idx
是新进入的 Shape2D 的子索引。要求 input_pickable 为 true
并且要至少设置一个 collision_layer 位。
void _mouse_shape_exit ( int shape_idx ) virtual
当鼠标指针离开该实体的任何形状时调用。shape_idx
是退出的 Shape2D 的子索引。要求 input_pickable 为 true
并且至少要设置一个 collision_layer 位。
int create_shape_owner ( Object owner )
为给定对象创建一个新的形状所有者。返回 owner_id
的新所有者,供将来引用。
bool get_collision_layer_value ( int layer_number ) const
返回 collision_layer 中是否启用了指定的层,给定的 layer_number
应在 1 和 32 之间。
bool get_collision_mask_value ( int layer_number ) const
返回 collision_mask 中是否启用了指定的层,给定的 layer_number
应在 1 和 32 之间。
RID get_rid ( ) const
返回对象的 RID。
float get_shape_owner_one_way_collision_margin ( int owner_id ) const
返回由给定 owner_id
标识的形状所有者的 one_way_collision_margin
。
PackedInt32Array get_shape_owners ( )
返回一个 owner_id
标识符的 Array。你可以在其他使用 owner_id
作为参数的方法中使用这些 ID。
bool is_shape_owner_disabled ( int owner_id ) const
如果为 true
,则禁用形状所有者及其形状。
bool is_shape_owner_one_way_collision_enabled ( int owner_id ) const
返回 true
,如果源于这个 CollisionObject2D 的形状所有者的碰撞不会被报告给 CollisionObject2D。
void remove_shape_owner ( int owner_id )
移除给定形状的所有者。
void set_collision_layer_value ( int layer_number, bool value )
根据 value
,启用或禁用 collision_layer 中指定的层,给定的 layer_number
应在 1 和 32 之间。
void set_collision_mask_value ( int layer_number, bool value )
根据 value
,启用或禁用 collision_mask 中指定的层,给定的 layer_number
应在 1 和 32 之间。
int shape_find_owner ( int shape_index ) const
返回指定形状的 owner_id
。
void shape_owner_add_shape ( int owner_id, Shape2D shape )
给形状所有者添加一个 Shape2D。
void shape_owner_clear_shapes ( int owner_id )
移除形状所有者的所有形状。
Object shape_owner_get_owner ( int owner_id ) const
返回给定形状所有者的父对象。
Shape2D shape_owner_get_shape ( int owner_id, int shape_id ) const
从给定形状所有者返回具有给定 ID 的 Shape2D。
int shape_owner_get_shape_count ( int owner_id ) const
返回给定形状所有者包含的形状数量。
int shape_owner_get_shape_index ( int owner_id, int shape_id ) const
从给定形状所有者返回具有给定 ID 的 Shape2D 的子索引。
Transform2D shape_owner_get_transform ( int owner_id ) const
返回形状所有者的 Transform2D。
void shape_owner_remove_shape ( int owner_id, int shape_id )
从给定的形状所有者中移除一个形状。
void shape_owner_set_disabled ( int owner_id, bool disabled )
如果为 true
,则禁用给定的形状所有者。
void shape_owner_set_one_way_collision ( int owner_id, bool enable )
如果 enable
为 true
,则源自该 CollisionObject2D 的形状所有者的碰撞将不会被报告为与 CollisionObject2D 发生碰撞。
void shape_owner_set_one_way_collision_margin ( int owner_id, float margin )
将由给定 owner_id
标识的形状所有者的 one_way_collision_margin
设置为 margin
像素。
void shape_owner_set_transform ( int owner_id, Transform2D transform )
设置给定形状所有者的 Transform2D。