如何解决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 应用程序循环必须:
- 通过
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过
pygame.display.update()
或pygame.display.flip()
更新显示 - 限制每秒帧数以限制 CPU 使用率
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。