You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:27:00