用pygame打开一个新窗口

时间:2016-04-28 13:05:11

标签: python user-interface window pygame

我正在制作街机风格游戏,如果玩家精灵与敌人发生碰撞,它应该关闭游戏画面并执行Game over screen.py文件,这是游戏结束屏幕的脚本,顾名思义。 我以前尝试过的代码如下:

def sprite_collide():
    global p_rect
    global e_rect
    if p_rect.colliderect(e_rect):
        execfile('Game Over Screen.py')

我刚开始在屏幕上制作游戏,所以代码如下:

import pygame, sys, time, random
from pygame.locals import *

pygame.init() #initializes pygame window
pygame.display.set_caption('KeyCast') #titlebar caption

GOSURF=pygame.display.set_mode((900,600),0,32) #sets main surface

gobackground = pygame.image.load('Game Over.png') #background image for game

"""--------------------------------------------------------------------------"""
while True:

    def quitgame():
        """exits programme without any errors"""
        for event in pygame.event.get(): #quitting process
            if event.type==QUIT: #if player selects 'exit button' on window
                pygame.quit() #pygame quit
                sys.exit() #system quit
    quitgame()

    def Surface():
        GOSURF.blit(gobackground,(0,0)) #background image

    Surface()

    pygame.display.update()

然而,每当精灵与敌人发生碰撞时,我都会收到错误消息" NameError:全球名称' GOSURF'未定义"""。 不知道该怎么做。

注意:我在GOSURF游戏屏幕上使用了不同的名称作为pygame表面,而游戏脚本中的原始表面只是SURF。

2 个答案:

答案 0 :(得分:1)

如果您的意思是同时制作多个窗口。你不能这样做。它是SDL(底层C库)的限制。

在您的情况下,您必须声明GOSURF全局来从您的函数中获取它。

def Surface():
    global GOSURF
    GOSURF.blit(gobackground,(0,0)) #background image

答案 1 :(得分:0)

将游戏画面脚本中的任何新变量声明为脚本中的全局变量,现在可以正常工作了!这是我添加的位,请参阅完整代码的原始问题:

gobackground = pygame.image.load('Game Over.png') #background image for game

global GOSURF
global gobackground

"""--------------------------------------------------------------------------"""
while True:

当我将变量添加到脚本中时,它会继续使变量变为全局变量。