pygame 不会在我的 pymunk 模拟中画我的圆圈

问题描述

我对 pymunk 相当陌生,我想为我未来的游戏制作物理引擎,只是有一个小问题,我的代码不会绘制 pygame 试图可视化的圆圈。这是我的代码

import pygame
import pymunk
import sys


def create_item(space):
    body = pymunk.Body(1,100,body_type = pymunk.Body.DYNAMIC)
    body.position = (450,50)
    shape = pymunk.Circle(body,80)
    space.add(body,shape)
    return shape


def draw_items(items):
    for item in items:
        pygame.draw.circle(screen,item_color,item.body.position,80)


def quit():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()


def display_update():
    screen.fill(bg_color)
    clock.tick(FPS)
    space.step(1/60)
    pygame.display.flip()


# Constructor
pygame.init()

# Constants and Variables
WIDTH = 900
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH,HEIGHT))
FPS = 60
clock = pygame.time.Clock()

# Colors
bg_color = 30,30,40
item_color = 200,200,200

# Pymunk Variables
space = pymunk.Space()
space.gravity = (0,500)
items = []
items.append(create_item(space))


# Loops
def main():
    running = True
    while running:
        quit()
        display_update()
        draw_items(items)


main()

我真的不知道这里的问题是什么,它不会给我一个错误或类似的东西,我只得到了一个干净的空白画布和我的 bg 颜色。(对于不好的评论也很抱歉)

>

解决方法

您必须在更新显示之前绘制对象

def main():
    running = True
    while running:
        quit()
        screen.fill(bg_color)
        draw_items(items)
        pygame.display.flip()
        clock.tick(FPS)
        space.step(1/60)

您实际上是在 Surface 对象上绘图。如果您在与 PyGame 显示相关联的表面上绘图,则不会立即在显示中看到。当显示更新为 pygame.display.update()pygame.display.flip() 时,更改变为可见。

典型的 PyGame 应用程序循环必须: