如何在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
相关产品推荐
相关产品推荐

