我的程序有两个问题:
keys = pygame.key.get_pressed() pygame.error: video system not initialized
代码的重要部分是:
import pygame
from pygame.locals import*
pygame.init()
screen = pygame.display.set_mode((1200, 700))
ticket1 = True
# ...
c = 550
d = 100
# ...
color2 = (250, 20, 20)
while ticket1 == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
ticket1 = False
pygame.quit()
pygame.display.quit()
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
c += 1
# ...
screen.fill((255, 250, 245))
pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))
pygame.display.flip()
如果我在while循环中写keys = pygame.key.get_pressed()
它没有错误,但似乎更慢。
我还有另一个错误:pygame.error: display Surface quit
,但我总是在我所有的pygame程序中都有它并且它不是那么重要但其他事情很重要。
答案 0 :(得分:2)
1 .--------------
在pygame.quit()
之后,您不需要pygame.display.quit()
,而是sys.exit()
。
pygame.quit()
未退出计划,因此该计划仍会尝试拨打screen.fill()
以及pygame.quit()
以下的其他功能
或者您必须将pygame.quit()
放在while ticket == True:
之外(然后您不需要sys.exit()
)
您可以使用while ticket1:
代替while ticket == True:
- 它更加pythonic。
while ticket1: # it is more pythonic
for event in pygame.event.get():
if event.type == pygame.QUIT:
ticket1 = False
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
c += 1
# ...
screen.fill((255, 250, 245))
pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))
pygame.display.flip()
pygame.quit()
2 .--------------
if keys[pygame.K_d]: c += 1
位于for event
循环内部,因此只有在事件发生时才会调用 - 当鼠标移动时,按下键或“未按下”键时。将其移到for event
循环之外。
while ticket1: # it is more pythonic
for event in pygame.event.get():
if event.type == pygame.QUIT:
ticket1 = False
keys = pygame.key.get_pressed()
# outside of `for event` loop
if keys[pygame.K_d]:
c += 1
# ...
screen.fill((255, 250, 245))
pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))
pygame.display.flip()
pygame.quit()
有些人在没有get_pressed()
# clock = pygame.time.Clock()
move_x = 0
while ticket1 == True:
# events
for event in pygame.event.get():
if event.type == pygame.QUIT:
ticket1 = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
ticket1 = False
elif event.key == pygame.K_d:
move_x = 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d:
move_x = 0
# variable modification
c += move_x
# ...
# draws
screen.fill((255, 250, 245))
pygame.draw.rect(screen, color2, pygame.Rect(c, d, 50, 75))
pygame.display.flip()
# 60 FPS (Frame Per Second) to make CPU cooler
# clock.tick(60)
pygame.quit()
BTW:使用pygame.time.Clock()在快速和慢速计算机上获得相同的FPS。没有FPS程序刷新屏幕每秒钟的时间,所以CPU忙碌而且很热。
如果您使用FPS,则必须添加c
更大的值才能获得与之前相同的速度。
答案 1 :(得分:-2)
我有同样的错误
event.type == 256
为我工作