我正在使用pygame,update()仅在第一次有效

问题描述 投票:0回答:1

当我运行 update() 函数时,它会更新窗口,但是随后我尝试更新窗口时,它不会更新,即使我调用完全相同的函数。问题要么是这样,要么是它不再绘图,我不确定是哪一个。

代码:

def drawmove(rm,move,baseline):
    for i in range(len(move)):
        imagex = baseline[0]+(move[i][0]*5)
        imagey = baseline[1]-(move[i][1]*5)
        win.blit(move_icon_img, (imagex*rm,imagey*rm))

def refresh(rm,players,current_player,moveset):
    #background
    win.blit(background_img, (0,0))
    #5th move card (the one in the middle)
    move_4 = moveset[4][1]
    drawmove(rm,move_4,[13,56])
    pygame.display.update()

我查过了,每次传入的内容都不一样,而且blit函数每次传入的数字也不一样,但是输出到窗口的不一样。

我将不同的值传递到drawmove中的blit函数中,并期望窗口看起来不同,但窗口看起来是一样的。

这是重现错误的最少代码:

import pygame
win = pygame.display.set_mode((100,100))
while True:
    win.fill((0,0,0))
    pygame.display.update()
    print("black")
    input()
    win.fill((255,255,255))
    pygame.display.update()
    print("white")
    input()

编辑:问题是 pygame 窗口不断崩溃,但仍然不确定如何修复它

python events pygame event-handling
1个回答
0
投票

使用

input()
与需要处理事件的窗口应用程序不兼容,因此窗口管理器不会认为应用程序已崩溃。

这是一个简单的示例,显示每次释放按键时都会切换颜色。

from itertools import cycle
import pygame

background_colors = cycle(["black", "white"])  # pygame has named colors
background_color = next(background_colors)  # initialise

width, height = 640, 480  # screen dimensions
FPS = 60

pygame.init()
screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()  # to limit the framerate and ease CPU burden

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYUP:
            background_color = next(background_colors)
    # set the title bar instead of printing to the console
    pygame.display.set_caption(background_color)  
    screen.fill(background_color)
    pygame.display.update()
    clock.tick(FPS)  # limit FPS

pygame.quit()

请参阅 pygame 支持的命名颜色的此列表

© www.soinside.com 2019 - 2024. All rights reserved.