如何使用pymunk创建静态矩形形状
使用Pymunk创建静态矩形刚体的实现方法
核心说明
静态刚体默认不受重力、碰撞冲量影响,位置固定,适合用来做地面、平台、场景边界等固定元素。
矩形碰撞形状有两种常见实现方案:
- 直接创建
Poly多边形形状:适合实心静态矩形,代码更简洁 - 拼接4个
Segment线段形状:适合空心矩形边界,对应你查阅的Segments相关接口
完整实现代码
方法1:直接创建实心静态矩形(推荐)
import pymunk # 初始化物理空间 space = pymunk.Space() space.gravity = (0, -900) # 定义矩形参数:中心坐标、宽度、高度 rect_center = (300, 100) rect_width = 200 rect_height = 20 # 绑定到空间自带的全局静态刚体,无需额外创建刚体实例 static_rect = pymunk.Poly.create_box( body=space.static_body, size=(rect_width, rect_height) ) # 设置碰撞物理属性 static_rect.friction = 0.7 static_rect.elasticity = 0.2 # 将形状加入物理空间生效 space.add(static_rect)
方法2:用Segments拼接空心矩形边界
Segments是线段形状接口,单个实例表示两点之间的一条带厚度的线段,4条线段可拼接为空心矩形:
import pymunk space = pymunk.Space() space.gravity = (0, -900) # 定义空心矩形的四个顶点坐标,按顺序排列 left_bottom = (200, 90) right_bottom = (400, 90) right_top = (400, 110) left_top = (200, 110) # 线段厚度 line_thickness = 2 # 依次创建四条边的Segment实例,全部绑定到全局静态刚体 edge_bottom = pymunk.Segment(space.static_body, left_bottom, right_bottom, line_thickness) edge_right = pymunk.Segment(space.static_body, right_bottom, right_top, line_thickness) edge_top = pymunk.Segment(space.static_body, right_top, left_top, line_thickness) edge_left = pymunk.Segment(space.static_body, left_top, left_bottom, line_thickness) # 统一设置四条边的物理属性 for edge in [edge_bottom, edge_right, edge_top, edge_left]: edge.friction = 0.7 edge.elasticity = 0.2 # 将所有线段加入物理空间生效 space.add(edge_bottom, edge_right, edge_top, edge_left)
注意事项
- 静态形状可以绑定到两种静态刚体:要么直接用
space.static_body全局实例,要么手动创建pymunk.Body(body_type=pymunk.Body.STATIC),两者效果一致 - 若需要创建位置偏移的矩形,可在
Poly创建时传入offset参数调整 - 实心矩形用
Poly实现的计算性能优于Segments拼接的空心矩形,没有空心需求优先选择第一种方案
内容的提问来源于stack exchange,提问作者Tharusha-dev
相关产品推荐
相关产品推荐

