当我尝试调整窗口大小时,pygame崩溃了

时间:2013-09-16 22:38:04

标签: python python-2.7 pygame

去年四月在这个论坛上提出了这个问题。但是,唯一的答案是:“你的脚本适用于我的系统,检查并确保你有pygame模块用于你的python版本。”所以我先检查了一下然后检查了一下。 (我有Python 2.7的Python 2.7和Pygame版本1.9.1。)

所以不是这样,但以下代码会产生与其他人报告相同的错误:

This application has requested the runtime to terminate it in an unusual way. Please contact the application's support team for more info.

我希望原来的海报说过他们做了什么来解决它,因为我很难过。请注意,我没有在我尝试运行此功能的计算机上拥有管理员权限。这可能是问题吗?

脚本如下。 (这直接来自使用Python和Pygame开始游戏开发这本书。)它一直运行到你尝试调整窗口大小的那一刻。

background_image_filename = 'sushiplate.jpg'

import pygame
from pygame.locals import *
from sys import exit

SCREEN_SIZE = (640, 480)

pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)

background = pygame.image.load(background_image_filename).convert()

while True:

    event = pygame.event.wait()
    if event.type == QUIT:
        exit()
    if event.type == VIDEORESIZE:
        SCREEN_SIZE = event.size
        screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)
        pygame.display.set_caption("Window resized to "+str(event.size))

    screen_width, screen_height = SCREEN_SIZE
    for y in range(0, screen_height, background.get_height()):
        for x in range(0, screen_width, background.get_width()):
            screen.blit(background, (x, y))

    pygame.display.update()

2 个答案:

答案 0 :(得分:1)

警告,您为每个触发的事件绘制 。你想要:

while True:

    for event in pygame.event.get():

        if event.type == QUIT:
            exit()
        elif event.type == VIDEORESIZE:
            # ...
        elif event.type == KEYDOWN:
            # ...
    # draw.
    pygame.display.update()

下一段代码没有意义:你想做什么?

screen_width, screen_height = SCREEN_SIZE
for y in range(0, screen_height, background.get_height()):
    for x in range(0, screen_width, background.get_width()):
        screen.blit(background, (x, y))

pygame.display.update()

答案 1 :(得分:0)

尝试在调整大小模式设置中删除颜色深度:

screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE)

我得到的颜色深度与你的错误相同,当我删除它时它会消失。我不知道它为什么会失败,但VIDEORESIZE事件上根本没有官方文档,除了Event对象的大小,w和h字段设置为某些东西。 (现在检查这很困难,因为pygame.org现在已经关闭,据报道由于服务器RAID错误,但你可以通过Google获取信息,并查看缓存页面。)