新手请教,游戏入门程序 c

import sys
import pygame

def run_game():
    pygame.init()
    screen = pygame.display.set_mode((1200, 800))
    pygame.display.set_caption("Alien Invasion")

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

        screen.fill((200, 200, 200))
        pygame.display.flip()

这段代码运行结果是这样,请问什么问题啊?照着书本的范例写的。
Traceback (most recent call last):
  File "E:/My doc/Python/excersize/newgame/alien_invasion.py", line 36, in 
    run_game()
  File "E:/My doc/Python/excersize/newgame/alien_invasion.py", line 15, in run_game
    screen.fill((200, 200, 200))
pygame.error: display Surface quit

Process finished with exit code 1
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 3

有没有人帮忙看下 :confused: :confused: :confused: :confused:

4年前 评论
pardon110

如果你的 pygame 的版本是1.9.4的话,建议 pygame.quit()·改为pygame.QUIT 即可,原因是if条件永远成立,根本不会触发事件监听,进行画面绘制时系统退出了,找不到 surface,。

pygame.QUIT: int

pygame.quit() -> None uninitialize all pygame modules

前者返回的是常量, 后者若所有pygame 模块未初始化则返回 None值,很明显 最开始执行条件时,event.type 是None值,条件永远成立,紧接退出 ,后续fill之流不成立,报错是应该的

4年前 评论
Jason990420

if event.type == pygame.quit():
.....
screen.fill((200, 200, 200))

pygame.quit() 是一个函数/方法, 呼叫这个会结束pygame, 你再呼叫screen.fill((200,200,200)), 就会出错, 因为screen.fill()会调用到pygame.

这里有两个错:

  1. event.type 要比的是一个数值pygame.QUIT (定义为12), 而不是函数/方法pygame.quit()
  2. 在python里, 大小写是不一样的, 因为你输入quit为小写, 编辑器认为那是一个函数或方法, 所以自动帮你加上(), 而你没注意就放过没改正.

所以你只要把quit()改成QUIT就可以了 !

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!