运行pygame代码,它会显示“模块”pygame没有“init”成员和白屏风

2024-10-01 09:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个学习Python的初学者,在调试从一本书中复制的一系列代码时遇到了一个问题,我得到了一个白色屏幕窗口,而不是一个带有模式的窗口,代码如下:

import pygame, sys, random
import pygame.locals as GAME_GLOBALS
import pygame.event as GAME_EVENTS
pygame.init()
windowWidth = 640
windowHeight = 480
surface = pygame.display.set_mode((windowWidth, windowHeight))
pygame.display.set_caption('Pygame Shapes!')

while True:
    surface.fill((200, 0, 0))
    pygame.draw.rect(surface, (255, 0, 0), (random.randint(0, windowWidth), random.randint(0, windowHeight), 10, 10))

greenSquareX = windowWidth / 2
greenSquareY = windowHeight / 2

while True:
    surface.fill((0, 0, 0))
    pygame.draw.rect(surface, (0, 255, 0),
     (greenSquareX, greenSquareY, 10, 10))
    greenSquareX += 1
    # greenSquareY += 1
    pygame.draw.rect(surface, (0, 0, 255),
       (blueSquareX, blueSquareY, 10, 10))

    blueSquareX = 0.0
    blueSquareY = 0.0
    blueSquareVX = 1
    blueSquareVy = 1

while True:
    surface.fill((0, 0, 0))
    pygame.draw.rect(surface, (0, 0, 255),
       (blueSquareX, blueSquareY, 10, 10))
    blueSquareX += blueSquareVX
    blueSquareY += blueSquareVY
    blueSquareVX += 0.1
    blueSquareVY += 0.1

    for event in GAME_EVENTS.GET():
        if event.type == GAME_GLOBALS.QUIT:
            pygame.quit()
            sys.exit()
    pygame.dispaly.update()

我得到的第一个错误是:E1101:Module 'pygame' has no 'init' member'(4 ,1)。我以前用pygame.init()运行过其他Python代码,结果很好;但这次我得到了一个白屏窗口。我的代码怎么了?谢谢你的帮助!!在


Tags: 代码rectimporteventgameinitrandomsurface
1条回答
网友
1楼 · 发布于 2024-10-01 09:32:20

这花了我大量的调试来修复,哈哈。在

{1>你的所有循环都在更新中。一旦代码进入您的第一个while循环,在这之后没有任何东西(即pygame.display)更新,从而导致白屏综合症。在

此外,请一致地命名变量,并检查代码中是否有打字错误。您创建了一个blueSquareVy变量,只是为了稍后尝试将其称为blueSquareVY,而在代码的末尾,您拼错了pygame.display.update()。大写很重要,这只是一些打字错误!在

代码中也有逻辑错误。当你的图形被画到屏幕上之后,你应该填充你的窗口表面。看看你的变量,似乎你想让小正方形移动。您将在while循环之外创建位置变量,就像在循环中创建它们一样,它们在循环的每次迭代中都会以其初始值重新创建。在

带注释和错误修复的代码:

import pygame, sys, random
import pygame.locals as GAME_GLOBALS
import pygame.event as GAME_EVENTS
pygame.init()
windowWidth = 640
windowHeight = 480
surface = pygame.display.set_mode((windowWidth, windowHeight))
pygame.display.set_caption('Pygame Shapes!')

# Renamed variables to be consistent
# Moved variables out of the while loop
greenSquareX = windowWidth / 2
greenSquareY = windowHeight / 2
blueSquareX = 0.0
blueSquareY = 0.0
blueSquareVX = 1
blueSquareVY = 1

# Joined the two while loops into one
while True:
    surface.fill((200, 0, 0))
    pygame.draw.rect(surface, (255, 0, 0), (random.randint(0, windowWidth), random.randint(0, windowHeight), 10, 10))

    surface.fill((0, 0, 0))
    pygame.draw.rect(surface, (0, 255, 0),
     (greenSquareX, greenSquareY, 10, 10))
    greenSquareX += 1
    greenSquareY += 1

    pygame.draw.rect(surface, (0, 0, 255),
       (blueSquareX, blueSquareY, 10, 10))
    blueSquareX += blueSquareVX
    blueSquareY += blueSquareVY
    blueSquareVX += 0.1
    blueSquareVY += 0.1

    # Do not capitalize the .get() method for pygame.event class
    for event in GAME_EVENTS.get():
        if event.type == GAME_GLOBALS.QUIT:
            pygame.quit()
            sys.exit()

    # Misspelled pygame.display
    pygame.display.update()

希望这有帮助!在

相关问题 更多 >