pygame中段的同时旋转

问题描述

在pygame中,如何使下面代码中的框形段以恒定的角速度绕其合并的质心(400,263.5)旋转。目标是同时旋转四个部分,以使装箱的部分作为一个单元旋转,而动态物体在重力的作用下在其中移动

import pymunk
import pymunk.pygame_util
import pygame

GRAY = (220,220,220)

width_mass=50
height_mass=50

pygame.init()
size = 800,600
screen = pygame.display.set_mode(size)
draw_options = pymunk.pygame_util.DrawOptions(screen)

space = pymunk.Space()
space.gravity = (0,-50)

pts = [(373,25),(427,502),(373,502)]
for i in range(4):
    body_type=pymunk.Body(body_type=pymunk.Body.KINEMATIC)
    segment = pymunk.Segment(body_type,pts[i],pts[(i+1)%4],2)
    segment.elasticity = 0
    segment.friction=0
    space.add(segment)

body = pymunk.Body(mass=1,moment=100)
body.position = 400,500

mass = pymunk.poly.create_Box(body,(width_mass,height_mass))
mass.elasticity = 0
space.add(body,mass)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            #pygame.image.save(screen,'intro1.png')

    screen.fill(GRAY)
    space.debug_draw(draw_options)
    pygame.display.update()
    space.step(0.01)
    #print(body.position)

pygame.quit()

我似乎无法正确旋转和更新盒装细分

解决方法

如果要一直将各个段彼此连接,最简单的解决方案是将所有4个段都连接到同一主体,然后旋转该主体。为了便于计算实际旋转,将身体位置设置为中心(400,263.5),并将线段端点调整为相对于该点。

类似这样的东西:

pts = [(-27,-238.5),(27,238.5),(-27,238.5)]
body_type=pymunk.Body(body_type=pymunk.Body.KINEMATIC)  
body_type.position = (400,263.5)  
space.add(body_type)
for i in range(4):
    segment = pymunk.Segment(body_type,pts[i],pts[(i+1)%4],2)
    segment.elasticity = 0
    segment.friction=0
    space.add(segment)