物理引擎#

arcade.PymunkException#

class arcade.PymunkException[源代码]#

arcade.PymunkPhysicsEngine#

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

PyMunk物理引擎

参数
  • 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: Optional[Callable] = None, pre_handler: Optional[Callable] = None, post_handler: Optional[Callable] = None, separate_handler: Optional[Callable] = None)[源代码]#

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

add_sprite(sprite: arcade.sprite.Sprite, mass: float = 1, friction: float = 0.2, elasticity: Optional[float] = None, moment_of_inertia: Optional[float] = None, body_type: int = 0, damping: Optional[float] = None, gravity: Optional[Union[pymunk.vec2d.Vec2d, Tuple[float, float], pyglet.math.Vec2]] = None, max_velocity: Optional[int] = None, max_horizontal_velocity: Optional[int] = None, max_vertical_velocity: Optional[int] = None, radius: float = 0, collision_type: Optional[str] = 'default', moment_of_intertia: Optional[float] = None, moment: Optional[float] = None)[源代码]#

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

参数
  • 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 --

  • moment_of_intertia -- 不推荐使用与2.6.2中引入的打字错误兼容的转动惯量别名

  • moment -- 与版本<=2.6.1兼容的惯量别名已弃用

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

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

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

将力施加到Sprite上。

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

对精灵施加冲力

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

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

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

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

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

获取精灵的形状/身体。

get_sprite_for_shape(shape: Optional[pymunk.shapes.Shape]) Optional[arcade.sprite.Sprite][源代码]#

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

get_sprites_from_arbiter(arbiter: pymunk.arbiter.Arbiter) Tuple[Optional[arcade.sprite.Sprite], Optional[arcade.sprite.Sprite]][源代码]#

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

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

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

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

从物理引擎中移除精灵。

resync_sprites()[源代码]#

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

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

将力施加到Sprite上。

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

设置精灵的速度

set_position(sprite: arcade.sprite.Sprite, position: Union[pymunk.vec2d.Vec2d, Tuple[float, float]])[源代码]#

对精灵施加冲力

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

对精灵施加冲力

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

告诉物理引擎执行计算。

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

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

arcade.PymunkPhysicsObject#

class arcade.PymunkPhysicsObject(body: Optional[pymunk.body.Body] = None, shape: Optional[pymunk.shapes.Shape] = None)[源代码]#

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

arcade.PhysicsEnginePlatformer#

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

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

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

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

参数
  • player_sprite (Sprite) -- 动人的精灵

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

  • gravity_constant (float) -- 每帧向下加速

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

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

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

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

返回

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

返回类型

bool

disable_multi_jump()[源代码]#

禁用多跳。

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

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

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

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

参数

allowed_jumps (int) --

increment_jump_counter()[源代码]#

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

is_on_ladder()[源代码]#

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

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

让角色跳跃。

update()[源代码]#

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

退货

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

arcade.PhysicsEngineSimple#

class arcade.PhysicsEngineSimple(player_sprite: arcade.sprite.Sprite, walls: Union[arcade.sprite_list.sprite_list.SpriteList, Iterable[arcade.sprite_list.sprite_list.SpriteList]])[源代码]#

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

参数
  • player_sprite (Sprite) -- 动人的精灵

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

update()[源代码]#

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

退货

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