物理引擎#

class arcade.PymunkException[源代码]#

基类:Exception

为PymunkPhysicsEngine中的错误引发异常。

class arcade.PymunkPhysicsEngine(gravity=(0, 0), damping: float = 1.0, maximum_incline_on_ground: float = 0.708)[源代码]#

基类:

皮蒙克物理引擎

参数:
  • gravity -- 重力指向的方向

  • damping -- 保持到下一个刻度的速度。值1.0表示没有速度损失,而0.9表示速度损失10%等。

  • maximum_incline_on_ground -- 在IS_ON_GROUND()变为FALSE之前,地面可具有的最大倾斜度默认为0.708或略大于45°

add_collision_handler(first_type: str, second_type: str, begin_handler: Callable | None = None, pre_handler: Callable | None = None, post_handler: Callable | None = None, separate_handler: Callable | None = None)[源代码]#

添加代码以处理对象之间的冲突。

add_sprite(sprite: Sprite, mass: float = 1, friction: float = 0.2, elasticity: float | None = None, moment_of_inertia: float | None = None, body_type: int = 0, damping: float | None = None, gravity: Vec2d | Tuple[float, float] | Vec2 | None = None, max_velocity: int | None = None, max_horizontal_velocity: int | None = None, max_vertical_velocity: int | None = None, radius: float = 0, collision_type: str | None = 'default')[源代码]#

将精灵添加到物理引擎中。

参数:
  • sprite -- 要添加的精灵。

  • mass -- 物体的质量。默认为1。

  • friction -- 物体所具有的摩擦力。默认为0.2。

  • elasticity -- 这个物体多么有弹性啊。0表示没有反弹。值为1.0或更高时,可能会出现不良行为。

  • moment_of_inertia -- 转动惯量,或改变角动量所需的力。提供无穷大会使该对象停留在其旋转中。

  • body_type -- 身体的类型。默认为动态,即身体可以移动、旋转等。提供静态使其固定在世界上。

  • damping -- 请参见类文档。

  • gravity -- 请参见类文档。

  • max_velocity -- 对象的最大速度。

  • max_horizontal_velocity -- X轴上的最大速度,以像素为单位。

  • max_vertical_velocity -- Y轴上的最大速度,以像素为单位。

  • radius -- 为精灵创建的形状的半径,以像素为单位。

  • collision_type -- 为精灵指定一个名称,在添加碰撞处理程序时使用此名称。

add_sprite_list(sprite_list, mass: float = 1, friction: float = 0.2, elasticity: float | None = None, moment_of_inertia: float | None = None, body_type: int = 0, damping: float | None = None, collision_type: str | None = None)[源代码]#

将精灵列表中的所有精灵添加到物理引擎。

apply_force(sprite: Sprite, force: Tuple[float, float])[源代码]#

将力施加到精灵上。

apply_impulse(sprite: Sprite, impulse: Tuple[float, float])[源代码]#

对精灵施加冲力

apply_opposite_running_force(sprite: Sprite)[源代码]#

如果一个精灵在动态精灵的顶部向左移动,那么这个精灵应该被推到右边。

check_grounding(sprite: Sprite)[源代码]#

看看球员是否在地上。用来看看我们能不能跳下去。

get_physics_object(sprite: Sprite) PymunkPhysicsObject[源代码]#

获取精灵的形状/身体。

get_sprite_for_shape(shape: Shape | None) Sprite | None[源代码]#

给出一个形状,什么精灵与它联系在一起?

get_sprites_from_arbiter(arbiter: Arbiter) Tuple[Sprite | None, Sprite | None][源代码]#

在给定冲突仲裁器的情况下,返回与冲突关联的精灵。

is_on_ground(sprite: Sprite) bool[源代码]#

返回真的精灵是在某物之上。

remove_sprite(sprite: Sprite)[源代码]#

从物理引擎中移除精灵。

resync_sprites()[源代码]#

将视觉精灵设置为与物理引擎精灵相同的位置。在踏上黑猩猩的物理引擎之后,就叫它这个

set_friction(sprite: Sprite, friction: float)[源代码]#

将力施加到精灵上。

set_horizontal_velocity(sprite: Sprite, velocity: float)[源代码]#

设置精灵的速度

set_position(sprite: Sprite, position: Vec2d | Tuple[float, float])[源代码]#

对精灵施加冲力

set_rotation(sprite: Sprite, rotation: float)[源代码]#
set_velocity(sprite: Sprite, velocity: Tuple[float, float])[源代码]#

对精灵施加冲力

step(delta_time: float = 0.016666666666666666, resync_sprites: bool = True)[源代码]#

告诉物理引擎执行计算。

参数:
  • delta_time -- 向前推进模拟的时间到了。保持此值不变,不要对每个步骤使用不同的值。

  • resync_sprites -- 重新同步Arcade图形精灵,使其与其对应的皮蒙克精灵位于相同的位置。如果每帧运行多个步骤,请将前几步设置为FALSE,将作为更新一部分的最后一步设置为TRUE。

DYNAMIC = 0#
KINEMATIC = 1#
MOMENT_INF = inf#
STATIC = 2#
class arcade.PymunkPhysicsObject(body: Body | None = None, shape: Shape | None = None)[源代码]#

基类:

为精灵保存金丝雀形体/形状的对象。

class arcade.PhysicsEnginePlatformer(player_sprite: Sprite, platforms: SpriteList | Iterable[SpriteList] | None = None, gravity_constant: float = 0.5, ladders: SpriteList | Iterable[SpriteList] | None = None, walls: SpriteList | Iterable[SpriteList] | None = None)[源代码]#

基类:

用于平台的简单化物理引擎。开始使用这个引擎比使用像PyMunk这样更复杂的引擎要容易得多。

Note: 将静态精灵发送到 walls 参数并将精灵移动到 platforms 参数将对性能有非常极端的好处。

Note: 此引擎将自动移动任何发送到 platforms 参数之间的 boundary_topboundary_bottom 或者是 boundary_leftboundary_right 精灵的属性。您只需设置首字母 change_xchange_y 这就去。

参数:
  • player_sprite -- 动人的精灵

  • platforms (Optional[Union[SpriteList, Iterable[SpriteList]]]) -- 玩家无法通过的精灵。该值应仅用于移动精灵。应将静态精灵发送到 walls 参数。

  • gravity_constant -- 每帧向下加速

  • ladders (Optional[Union[SpriteList, Iterable[SpriteList]]]) -- 用户可以爬上的梯子

  • walls (Optional[Union[SpriteList, Iterable[SpriteList]]]) -- 玩家无法通过的精灵。该值应仅用于静态精灵。应将移动的精灵发送到 platforms 参数。

can_jump(y_distance: float = 5) bool[源代码]#

方法,该方法查看PERAYER_SPRITE下是否有发言权。如果有发言权,玩家可以跳跃,我们返回True。

返回:

如果我们下面有一个平台,那就是真的

disable_multi_jump()[源代码]#

禁用多跳。

调用此函数还不再需要在每次玩家跳跃时调用INCREMENT_JUMP_COUNTER()。

enable_multi_jump(allowed_jumps: int)[源代码]#

启用多跳。ALLOW_JUMP应包括初始跳转。(1只允许一次跳转,2允许两次跳转,依此类推)

如果您启用了多次跳跃,则每次播放器跳跃时都必须调用INCREMENT_JUMP_Counter()。否则,它们可以无限跳跃。

参数:

allowed_jumps --

increment_jump_counter()[源代码]#

更新跳转计数器以进行多跳跟踪

is_on_ladder()[源代码]#

如果玩家与阶梯列表中的精灵接触,则返回‘true’。

jump(velocity: int)[源代码]#

让角色跳跃。

update()[源代码]#

移动所有对象并解决碰撞。

退货:

已联系所有精灵的精灵列表。如果没有精灵,则列表为空。

ladders#

阶梯列表已在物理引擎中注册。

platforms#

移动平台列表已在物理引擎中注册。

walls#

墙上的名单在物理引擎上注册了。

class arcade.PhysicsEngineSimple(player_sprite: Sprite, walls: SpriteList | Iterable[SpriteList] | None = None)[源代码]#

基类:

简化的物理引擎,用于无重力的游戏,如自上而下的游戏。开始使用这个引擎比使用像PyMunk这样更复杂的引擎要容易得多。

参数:
  • player_sprite -- 动人的精灵

  • walls (Union[SpriteList, Iterable[SpriteList]) -- 它无法通过的精灵。这可以是一个或多个精灵列表。

update()[源代码]#

移动所有对象并解决碰撞。

退货:

已联系所有精灵的精灵列表。如果没有精灵,则列表为空。

walls#