gpt4 book ai didi

python - pygame跳过更新屏幕

转载 作者:行者123 更新时间:2023-12-04 10:02:34 25 4
gpt4 key购买 nike

我最近刚开始学习 pygame,目前正在编写一个教程示例,其中有一只猫在窗口边缘跑来跑去。(我用一个读取矩形替换了猫,以便您可以复制该示例)

import pygame
import sys
from pygame.locals import *

pygame.init()

FPS = 5
fpsClock = pygame.time.Clock()

DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')

WHITE = (255, 255, 255)
RED = (255, 0, 0)
# catImg = pygame.image.load('cat.png')
catx = 10
caty = 10
direction = 'right'

while True:
DISPLAYSURF.fill(WHITE)

if direction == 'right':
catx += 5
if catx == 280:
direction = 'down'
elif direction == 'down':
caty += 5
if caty == 220:
direction = 'left'
elif direction == 'left':
catx -= 5
if catx == 10:
direction = 'up'
elif direction == 'up':
caty -= 5
if caty == 10:
direction = 'right'

# DISPLAYSURF.blit(catImg, (catx, caty))
pygame.draw.rect(DISPLAYSURF, RED, (catx, caty, 100, 50))

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)

但是如果我运行它,显示的图像不是我所期望的:除非我将鼠标放在窗口上,否则红色矩形不会运行。 (这可能是一种设计选择。所以无论如何)
更令人担忧的是矩形没有按照我预期的方式移动。它向前移动几步,然后沿着路径向前跳跃一点,然后移动一点,再次跳跃,依此类推。
我找不到跳跃发生的模式。我唯一能说的是它不会沿着窗口边缘离开路径。

如果我移动线:
DISPLAYSURF.fill(WHITE)

在while循环之外,我可以看到屏幕沿着路径的跳过部分之后仍然是红色的。
所以在我看来,代码仍然在后台进行,矩形仍然被写入一个虚拟的 DISPLAYSURF 对象,但是那个 DISPLAYSURF 对象没有打印到屏幕上。此外,代码运行得非常快。

我使用 python 3.8.0
pygame 2.0.0.dev6
在 window 上

我没有找到任何关于此事的信息。
有人有同样的问题吗?这是从哪里形成的?

最佳答案

这是Indentation的问题. pygame.display.update()必须在应用程序循环而不是事件循环中完成:

while True:
DISPLAYSURF.fill(WHITE)

# [...]

pygame.draw.rect(DISPLAYSURF, RED, (catx, caty, 100, 50))

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

#<---|
pygame.display.update()
fpsClock.tick(FPS)

请注意,应用程序循环中的代码在每一帧中执行,但事件循环中的代码仅在事件发生时执行,例如鼠标移动( pygame.MOUSEMOTION )。

关于python - pygame跳过更新屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61756126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com