显示视频系统未初始化



所以我刚开始学习python,但现在当我运行这个并尝试跳转时,它加载了这个错误,而且矩形如果我按住它,它只移动了一次,我真的不知道有什么问题

这就是它显示的:keys=pygame.key.get_pressed((pygame.error:视频系统未初始化

import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Hello")
x = 100
y = 100
width = 50
height = 50
vel = 10
jump_count = 10
jump = False
run = True
while run:
pygame.draw.rect(win, (255, 255, 255), (x, y, width, height))
pygame.display.update()
for event in pygame.event.get():

if event.type == pygame.QUIT:
pygame.quit()
keys = pygame.key.get_pressed()

if keys[pygame.K_RIGHT] and x < 450:
x += vel
if keys[pygame.K_LEFT] and x > 0:
x -= vel
if not jump:
if keys[pygame.K_DOWN] and y < 450:
y += vel
if keys[pygame.K_UP] and y > 0:
y -= vel
if keys[pygame.K_SPACE]:
jump = True
else:
if jump_count >= -10:
neg = 1
if jump_count < 0:
neg = -1
y -= (jump_count ** 2) /2 * neg
jump_count = -1
else:
jump = False
jump_count = 10

win.fill((0, 0, 0))

这是缩进的问题。更正代码的缩进,它就会正常工作。

不要取消初始化事件循环中的所有pygame模块。终止应用程序循环,并在应用程序循环后调用pygame.quit()

run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# [...]
pygame.quit()

使用pygame.time.Clock来控制每秒帧数,从而控制游戏速度。

pygame.time.Clock对象的方法tick()以这种方式延迟游戏,即循环的每次迭代消耗相同的时间段
这意味着循环:

clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)

每秒运行60次。

此外,您的代码还包含一个拼写错误。您必须递减变量jump_count,而不是将其设置为-1:

jump_count = -1

jump_count -= 1

工作代码:

import pygame
pygame.init()
win = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
pygame.display.set_caption("Hello")
x = 100
y = 100
width = 50
height = 50
vel = 10
jump_count = 10
jump = False
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] and x < 450:
x += vel
if keys[pygame.K_LEFT] and x > 0:
x -= vel
if not jump:
if keys[pygame.K_DOWN] and y < 450:
y += vel
if keys[pygame.K_UP] and y > 0:
y -= vel
if keys[pygame.K_SPACE]:
jump = True
else:
if jump_count >= -10:
neg = 1
if jump_count < 0:
neg = -1
y -= (jump_count ** 2) /2 * neg
jump_count -= 1
else:
jump = False
jump_count = 10
win.fill((0, 0, 0))
pygame.draw.rect(win, (255, 255, 255), (x, y, width, height))
pygame.display.update()
pygame.quit()

最新更新