Pygame 和 Pymunk Programm 加载一些后屏,然后关闭

问题描述

我关注本教程 https://www.youtube.com/watch?v=nNjRz31-7s0&t=181s 是因为我想学习 pymunk,但后来出现了标题中描述的问题。我已经尝试重新启动 IDLE 并在线搜索解决方案,但很难找到一些东西,因为我没有收到错误消息。你能看出错误是什么吗?

import pygame
import pymunk

pygame.init()
display= pygame.display.set_mode((400,400))
clock= pygame.time.Clock()
space=pymunk.Space()
space.gravity = 0,-1000
FPS=80

def convert_coordinates(point):
    return point[0],400-point[1]
    

body = pymunk.Body()
body.position= 200,300
shape = pymunk.Circle(body,10)
shape.density= 1
shape.elasticity=1
space.add(body,shape)

segment_body = pymunk.Body(body_type=pymunk.Body.STATIC)
segment_shape= pymunk.Segment(segment_body,(0,25),(400,5)
segment_shape.elasticity=1
space.add(segment_shape)

def game():
    global segment_body,segment_shape
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
               return

        display.fill((255,255,255))
        x,y = convert_coordinates(body.position)
        pygame.draw.circle(display,(255,0),(int(x),int(y)),5)
        #pygame.draw.line(display,275),200),5)
        pygame.display.update()
        clock.tick(FPS)
        space.step(1/FPS)

game()
pygame.quit()

感谢您的帮助!

解决方法

我收到一条错误消息:

Aborting due to Chipmunk error: The shape's body must be added to the space before the shape.
    Failed condition: shape->body->space == space
    Source:Chipmunk2D\src\cpSpace.c:423

(注意 pymunk 是一个糟糕的库,不会抛出 python 异常 >:-( )。

space.add(segment_shape) 应该是 space.add(segment_body,segment_shape)

我建议不要在这里使用 IDLE,因为它似乎没有正确重定向来自 pymunk 的错误消息。使用终端来执行脚本(或者更好,更大规模的 IDE,如 Spyder 或 PyCharm)