pymunk.batch
模块¶
批处理模块包含有效获取批处理空间数据的函数。
备注
这个模块是高度实验性的,可能会在未来的Pymunk版本中发生变化,包括主要版本、次要版本和补丁版本!
首先创建空间和两个实体。
>>> import pymunk, pymunk.batch
>>> s = pymunk.Space()
>>> b1 = pymunk.Body(1, 1)
>>> b1.position = 1,2
>>> s.add(b1, pymunk.Circle(b1, 4))
>>> b2 = pymunk.Body(1,1)
>>> b2.position = 3,4
>>> s.add(b2, pymunk.Circle(b2, 4))
要获取数据,首先要创建一个Buffer Holder对象,该对象用于在调用之间重用底层数组。然后调用批处理方法。请注意,需要显式指定要提取的正文上的字段。
>>> data = pymunk.batch.Buffer()
>>> pymunk.batch.get_space_bodies(
... s,
... pymunk.batch.BodyFields.BODY_ID | pymunk.batch.BodyFields.POSITION,
... data,
... )
数据在Buffer对象中作为CFFI缓冲区可用。一个包含任何int数据,另一个包含浮点数据。您可以像这里那样直接使用它,也可以将它传递给实现NumPy数组等缓冲区协议的第三方。
>>> list(memoryview(data.int_buf()).cast("P")) == [b1.id, b2.id]
True
>>> list(memoryview(data.float_buf()).cast("d"))
[1.0, 2.0, 3.0, 4.0]
还可以获得具有冲突数据的仲裁器。请注意,我们需要调用Step来运行模拟,并首先清除数据数据缓冲区,以便可以重用它们:
>>> s.step(1)
>>> data.clear()
>>> pymunk.batch.get_space_arbiters(
... s,
... pymunk.batch.ArbiterFields.BODY_A_ID | pymunk.batch.ArbiterFields.BODY_B_ID,
... data,
... )
>>> list(memoryview(data.int_buf()).cast("P")) == [b2.id, b1.id]
True
>>> list(memoryview(data.float_buf()).cast("d"))
[]
- class pymunk.batch.ArbiterFields(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]¶
基类:
Flag
用于指定要获取的仲裁器属性的标志字段。
- ALL = 65535¶
所有的田野
- BODY_A_ID¶
pymunk.Body.id
正文A的值存储在int_buf中。
- BODY_B_ID¶
pymunk.Body.id
正文B的值存储在int_buf中。
- CONTACT_COUNT¶
联系人数量(1或2)`。存储在int_buf中的值。
- DISTANCE_1¶
pymunk.ContactPoint.distance
联系人的1。值存储在FLOAT_BUF中。
- DISTANCE_2¶
pymunk.ContactPoint.distance
联系人的2。值存储在FLOAT_BUF中。
- IS_FIRST_CONTACT¶
pymunk.Arbiter.is_first_contact
。存储在int_buf中的值(0或1)。
- NORMAL¶
pymunk.Arbiter.normal
。X和Y存储在FLOAT_BUF中。
- POINT_A_1¶
pymunk.ContactPoint.point_a
存储在FLOAT_BUF中的联系人1的X和Y。
- POINT_A_2¶
pymunk.ContactPoint.point_a
存储在FLOAT_BUF中的联系人2的X和Y。
- POINT_B_1¶
pymunk.ContactPoint.point_b
存储在FLOAT_BUF中的联系人1的X和Y。
- POINT_B_2¶
pymunk.ContactPoint.point_b
存储在FLOAT_BUF中的联系人2的X和Y。
- TOTAL_IMPULSE¶
pymunk.Arbiter.total_impulse
。X和Y存储在FLOAT_BUF中。
- TOTAL_KE¶
pymunk.Arbiter.total_ke
。存储在FLOAT_BUF中的值。
- class pymunk.batch.BodyFields(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]¶
基类:
Flag
用于指定要获取的正文属性的标志字段。
- ALL = 65535¶
所有的田野
- ANGLE¶
pymunk.Body.angle
。存储在FLOAT_BUF中的值。
- ANGULAR_VELOCITY¶
pymunk.Body.angular_velocity
。存储在FLOAT_buf中的X和Y
- BODY_ID¶
pymunk.Body.id
。存储在int_buf中的值。
- POSITION¶
pymunk.Body.position
。X和Y存储在FLOAT_BUF中。
- VELOCITY¶
pymunk.Body.velocity
。X和Y存储在FLOAT_BUF中。
- pymunk.batch.get_space_arbiters(space: Space, fields: ArbiterFields, buffers: Buffer) None [源代码]¶
获取空间中所有活动仲裁器的数据。
使用FIELS属性筛选出您感兴趣的字段。
数据在BATCHED_DATA缓冲区中返回。
- pymunk.batch.get_space_bodies(space: Space, fields: BodyFields, buffers: Buffer) None [源代码]¶
获取空间中所有身体的数据。
使用FIELS属性筛选出您感兴趣的字段。
数据在BATCHED_DATA缓冲区中返回。