微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在尝试在pygame中制作一个方形角色精灵您能否看一下我的代码并告诉我我做错了什么?链接到有关它的视频

如何解决我正在尝试在pygame中制作一个方形角色精灵您能否看一下我的代码并告诉我我做错了什么?链接到有关它的视频

一个youtube视频告诉我放我已经放的东西。

https://www.youtube.com/watch?v=bVx2nhB0t1o&feature=youtu.be

我的窗口打开,但只停留在黑屏上。关闭窗口时,我收到错误消息:

Traceback (most recent call last):
  File "./invaders.py",line 23,in <module>
    keys = pygame.key.get_pressed()
pygame.error: video system not initialized

我真的不明白为什么会这样,任何帮助将不胜感激。

import pygame
pygame.init()
win = pygame.display.set_mode((500,500))

pygame.display.set_caption("Space Invaders")

x = 50
y = 50
width = 30
height = 30
vel = 5

run = True
while run:
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

pygame.quit()

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
    x -= vel
if keys[pygame.K_RIGHT]:
    x += vel
if keys[pygame.K_UP]:
    y -= vel
if keys[pygame.K_DOWN]:
    y += vel

win.fill(0)
pygame.draw.rect(win,(255,0),(x,y,width,height))
pygame.display.update()

解决方法

您的代码不正确。通常,PyGame应用程序具有一个“主循环”,用于处理事件循环,处理任何用户输入,然后重新绘制屏幕。

您的代码具有所有这些元素,但是一整段代码不在主循环内,仅在关闭窗口后才执行。您需要小心放置和缩进。

下面的代码基本上是您的确切代码,并进行了一些调整。

import pygame

BLACK = (  0,0 )   # colours
RED   = (255,0 )

pygame.init()
win = pygame.display.set_mode((500,500))

pygame.display.set_caption("Space Invaders")

x = 50
y = 50
width = 30
height = 30
vel = 5

clock = pygame.time.Clock()
run = True

# Main loop
while run:
    #pygame.time.delay(100)   # <-- don't use delays like this

    # handle the PyGame event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    # handle user movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        x -= vel
    if keys[pygame.K_RIGHT]:
        x += vel
    if keys[pygame.K_UP]:
        y -= vel
    if keys[pygame.K_DOWN]:
        y += vel

    # repaint the window
    win.fill( BLACK )
    pygame.draw.rect( win,RED,( x,y,width,height ) )
    pygame.display.update()

    clock.tick( 10 )  # limit the FPS here

# main loop has ended,quit
pygame.quit()

现在进行窗口绘制,并且用户输入处理现在移到主循环的范围内。

此外,最好不要在PyGame代码中添加固定的时间延迟。使用PyGame时钟调整帧频。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。