gpt4 book ai didi

python - Pygame 不响应变量更新

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:52 25 4
gpt4 key购买 nike

我正在尝试构建一个程序,将 Pygame 表面中的每个像素更改为随机颜色。

对于固定且恒定的表面尺寸(例如 1300 x 700),这是可行的,并且整个表面填充有随机颜色,但是我正在尝试使用 Pygame 的 pygame.RESIZABLE 功能动态调整表面大小(通过更新程序工作的计算出的 X 和 Y 值),每次调整表面大小时,Pygame 表面仅输出程序初始表面宽度和高度内的像素的随机彩色像素(在本例中为 1300 x 700)表面的其余部分保持黑色(我设置的默认背景颜色),即使当我将响应屏幕高度和宽度的变量(并用于迭代所有像素)打印到程序日志时,它们按预期更新。

我不明白表面如何不响应这些更新的变量,并且我不知道如何解决此问题。

非常感谢任何帮助,欢迎对我的代码有任何疑问,谢谢!

import pygame
import random
pygame.init() #initiates pygame

Comp_X = 1300
Comp_Y = 700

Window = pygame.display.set_mode((Comp_X, Comp_Y), pygame.RESIZABLE) #defines the window size (the varible doesnt have to be called window)
pygame.display.set_caption("Random Colours") #sets the title of the window
clock = pygame.time.Clock() #sets the refresh rate of the program



def GameLoop():
global Comp_X #computed pixles for the X axis
global Comp_Y #computed pixles for the Y axis
Comp_Tot = Comp_X * Comp_Y #total pixles on the screen
print("initial computed total pixles = " + str(Comp_Tot))

#setting x and y position
x = 0
y = 0


GameExit = False #sets the defult value of this varible to true

while not GameExit: #this is effectivly a "while true" loop, unless the varible "crashed" is set to false

for event in pygame.event.get(): #this for loop will listen for events
print(event.type)
print("X = " + str(Comp_X))
print("Y = " + str(Comp_Y))

if event.type == pygame.QUIT: # this if statement checks to see if the X in the top right of the window was pressed
GameExit = True # this will break the while loop if the condition is met
print("X = " + str(Comp_X))
print("Y = " + str(Comp_Y))

if event.type == 16: #event type 16 is the window resizing event
Comp_X = event.dict['size'][0]
Comp_Y = event.dict['size'][1]
Comp_Tot = Comp_X * Comp_Y
print("current computed total pixles = " + str(Comp_Tot))

#Creating the colours
if event.type == pygame.KEYDOWN:

if event.key == pygame.K_RETURN:

for pixle in range (0, Comp_Tot):
if x == Comp_X:
print("Computed X = " + str(Comp_X))
print("Computed Y = " + str(Comp_Y))
x = 0
y += 1
pygame.draw.rect(Window, (random.randint(0,255), random.randint(0,255), random.randint(0,255)), [x, y, 2, 2])# draws a red square
x += 1


#Drawing the frame
pygame.display.update() #This updates the frame
clock.tick(60) # this defines the FPS



GameLoop()
pygame.quit() # this will close the window if the "while GameLoop" loop stops running
quit()

Using defult height and width of 1300 x 700

Resizing surface to 1457 x 992 - not all of the surface is filled!

最佳答案

实际上,代码中有两个问题导致了该错误。第一个是没有

窗口 = pygame.display.set_mode((Comp_X, Comp_Y), pygame.RESIZABLE)

if event.type == 16: 内的行,如前所述。

另一个问题非常小,但如果在填充屏幕一次后调​​整大小,则会导致它无法正常工作,也就是说,在填充屏幕后,您永远不会将 x 或 y 的值重置回 0。

固定代码部分:

            if event.type == pygame.VIDEORESIZE: 
Comp_X = event.w
Comp_Y = event.h
Comp_Tot = Comp_X * Comp_Y
print("current computed total pixles = " + str(Comp_Tot))
Window = pygame.display.set_mode((Comp_X, Comp_Y), pygame.RESIZABLE)

#Creating the colours
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
for pixle in range (0, Comp_Tot):
if x == Comp_X:
#print("Computed X = " + str(Comp_X))
#print("Computed Y = " + str(Comp_Y))
x = 0
y += 1
pygame.draw.rect(Window, (random.randint(0,255), random.randint(0,255), random.randint(0,255)), [x, y, 2, 2])# draws a red square
x += 1
x = 0
y = 0

我还将 event.type == 16 更改为 event.type == pygame.VIDEORESIZE,因为它更具可读性。

关于python - Pygame 不响应变量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049513/

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