本文主要是介绍pymunk刚体详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 构造函数
- 成员变量
- 成员函数
- 回调
构造函数
刚体堪称是pymunk引擎中的核心对象,几乎所有pymunk仿真都需要创建,其构造函数非常简单,只有三个参数
Body(mass: float = 0, moment: float = 0, body_type: int = DYNAMIC)
mass表示质量;moment为动量;body_type为物体类型,有三个选项,分别是
- 0 DYNAMIC 是默认类型,具有有限质量,受到冲击和力的影响
- 1 KINEMATIC 属于不受物理规律约束的动态物体,其行为完全受到代码控制
- 2 STATIC 静态物体
可见,质量和动量只有对于第一种类型有效。
成员变量
Body类的成员变量表如下
变量 | 类型 | 说明 |
---|---|---|
body_type | int | 刚体类型 |
angle | float | 刚体的旋转角度 |
angular_velocity | float | 角速度 |
center_of_gravity | Vec2d | 重心位置,默认 ( 0 , 0 ) (0,0) (0,0) |
force | Vec2d | 质心所受到的力 |
id | int | 每个新刚体都会获得一个新的id |
is_sleeping | bool | 是否处于休眠状态 |
kinetic_energy | float | 动能 |
mass | float | 质量 |
moment | float | 动量 |
position | Vec2d | 位置 |
position_func | 函数 | 位置的回调函数 |
rotation_vector | Vec2d | 转动向量 |
shapes | Shapes | 绑定在刚体上的形状 |
constraints | Constraint | 约束 |
space | Space | 刚体所在空间 |
torque | float | 扭矩 |
velocity | Vec2d | 质心处的速度 |
velocity_func | 函数 | 速度的回调函数 |
成员函数
Body中封装了两个apply开头的函数,用于为刚体添加力和冲击。根据坐标特征,这些函数可以分为两类,分别是基于局部坐标和世界坐标。此外,还提供了获取某点速度的函数。
物理量 | 局部坐标 | 世界坐标 |
---|---|---|
力 | apply_force_at_local_point | apply_force_at_world_point |
冲击 | apply_impulse_at_local_point | apply_impulse_at_world_point |
获取速度 | velocity_at_local_point | velocity_at_local_point |
提到坐标转换,Body中封装了从局部坐标到世界坐标的转换函数
- local_to_world(v)
此外,还提供了两个休眠函数
- sleep() 进入休眠状态
- sleep_with_group(body) 强制绑定另一个刚体,并进入休眠状态
回调
在成员变量中,有两个回调函数,分别在位置和速度发生变化时被调用,在Body中,通过下面两个函数来更新位置和速度
- update_position(body, dt) 更新位置
- update_velocity(body, gravity, damping, dt) 更新速度
下面以速度回调函数为例,实现速度更新时
import pymunk
body = pymunk.Body(1,2)
def limit_velocity(body, gravity, damping, dt):max_velocity = 1000pymunk.Body.update_velocity(body, gravity, damping, dt)l = body.velocity.lengthif l > 1000:scale = 1000 / lbody.velocity = body.velocity * scaleprint(body.velocity)body.velocity_func = limit_velocity
这篇关于pymunk刚体详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!