python-3.x - Pygame 脚本停止响应

标签 python-3.x crash pygame

我正在用 pygame 制作一个简单的游戏,但是当我尝试运行它时,它立即崩溃了。我不确定是游戏循环造成的还是什么。 这是我当前的代码:

import pygame, sys
from pygame import *
pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

game_window = pygame.display.set_mode((640, 360))
pygame.display.set_caption('The Old House 0.1')

black = (0, 0, 0)
white = (255, 255, 255)
draw_rect = pygame.draw.rect
window_center = (320, 180)
player_img = pygame.image.load('player.png')
keys = pygame.KEYDOWN
event_get = pygame.event.get()
player_x = 320
player_y = 180

while True:
    game_window.fill(black)
    draw_rect(game_window, white, (195, 55, 250, 250))
    for event in event_get:
        if event.type == keys:
            if event.key == pygame.K_w:
                player_y += 10
            elif event.key == pygame.K_s:
                player_y -= 10
            elif event.key == pygame.K_d:
                player_x += 10
            elif event.key == pygame.K_a:
                player_x -= 10
        elif event.type == QUIT:
            pygame.quit()
            sys.exit()

    game_window.blit(player_img, (player_x, player_y))

    pygame.display.update()
    fpsClock.tick(FPS)

如果您想知道,我没有收到任何错误消息,游戏窗口只是停止响应。另外,我正在使用的 IDE (Sublime Text 3) 会输出游戏文件的位置和我的路径。

最佳答案

当我使用一些占位符图形运行您的代码时,窗口会显示,然后不久就会卡住为“未响应”。事实证明,您需要每帧获取 pygame 事件列表,而不是在开始时调用一次pygame.event.get()。这是有道理的,因为您需要在游戏的整个生命周期中响应鼠标点击、键盘按下和窗口关闭,而不仅仅是在第一帧中。进行此修复,这是工作代码:

import pygame, sys
from pygame import *
pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

game_window = pygame.display.set_mode((640, 360))
pygame.display.set_caption('The Old House 0.1')

black = (0, 0, 0)
white = (255, 255, 255)
window_center = (320, 180)
player_img = pygame.image.load('player1.png')
player_x = 320
player_y = 180

while True:
    game_window.fill(black)
    pygame.draw.rect(game_window, white, (195, 55, 250, 250))
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                player_y += 10
            elif event.key == pygame.K_s:
                player_y -= 10
            elif event.key == pygame.K_d:
                player_x += 10
            elif event.key == pygame.K_a:
                player_x -= 10
        elif event.type == QUIT:
            pygame.quit()
            sys.exit()

    game_window.blit(player_img, (player_x, player_y))
    pygame.display.update()
    fpsClock.tick(FPS)

此外,您可能会惊讶地发现您的上下颠倒了!在 pygame 中,(0, 0) 对应于窗口的左上角

关于python-3.x - Pygame 脚本停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40562030/

相关文章:

python - 如何在pygame中生成随机矩形并使它们像飞扬的小鸟一样移动?

python - 我想使用 Python 中的套接字编程流式传输网络摄像头

python - 想要使用 Python3 从互联网上读取文件的特定偏移量

python - 如何根据列中连续出现的值将 pandas 数据框拆分为多个部分?

python - 在 Python 中迭代字符串列表以进行操作

ios - iPhone应用程序在模拟器上工作正常,但在实际设备上崩溃

android - 在android应用程序中访问手机的内部存储?

crash - VPython灰屏崩溃

python - QUIT pygame 事件未定义

python - 如何在保留结构的同时遍历列表列表