首页 > 解决方案 > 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 颜色。(也很抱歉不好的评论)

标签: pythonpygamepymunk

解决方案


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

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 显示关联的Surface上绘图,则这不会立即在显示中可见。pygame.display.update()当使用或更新显示时,更改变为可见pygame.display.flip()

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


推荐阅读