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

如何在Pymunk中创建L形刚体?

Pymunk L形刚体实现方法

你当前代码的问题在于默认将两个矩形形状的中心与所属刚体的中心对齐,两个形状重叠无法形成L形结构。pymunk.Poly.create_box支持传入offset参数定义形状相对于刚体中心的偏移坐标,调整两个矩形的偏移量即可完成L形拼接,同时建议使用Pymunk内置的力矩计算方法生成刚体力矩,物理模拟效果会更准确。

修改后完整可运行代码

import pymunk
import pygame
import pymunk.pygame_util


pygame.init()
size = 640, 240
screen = pygame.display.set_mode(size)
draw_options = pymunk.pygame_util.DrawOptions(screen)
space = pymunk.Space()
space.gravity = 0, 90

b0 = space.static_body
segment = pymunk.Segment(b0, (0, 200), (640, 200), 4)
segment.elasticity = 1

# 计算两个矩形拼接后的总力矩,物理效果更真实
moment = pymunk.moment_for_box(1, (100,50)) + pymunk.moment_for_box(1, (50,100))
body = pymunk.Body(mass=1, moment=moment)
body.position = 300, 50

# 横向矩形:100宽50高,偏移到刚体中心右下侧
box = pymunk.Poly.create_box(body, (100, 50), offset=(25, 25))
box.elasticity = 0.9
box.friction = 0.8

# 纵向矩形:50宽100高,偏移到刚体中心左上侧,和横向矩形刚好拼接为L形
box2 = pymunk.Poly.create_box(body, (50, 100), offset=(-25, -25))
box2.elasticity = 0.9
box2.friction = 0.8

space.add(body, box, box2, segment)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    screen.fill(color="GRAY")
    space.debug_draw(draw_options)
    pygame.display.update()
    space.step(0.01)


pygame.quit()

如果你需要调整L形的大小、比例,只需要修改两个矩形的尺寸和对应的offset参数即可。

内容的提问来源于stack exchange,提问作者Djole Stevanovic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:54:01