2016-04-28 181 views
0

我制作了一款街机风格的游戏,如果玩家精灵与敌人发生碰撞,它应该关闭游戏屏幕并执行游戏结束屏幕上的Game.screen.py文件顾名思义。 我的代码,我曾经尝试这样做如下:用pygame打开一个新窗口

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。

回答

1

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

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

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

刚做好了该怎么做,也没有关闭最后一个窗口并打开新窗口。但这是一个非常简单的调整,我不得不使haha – gruntapocalypse

+0

@gruntapocalypse很好看,你找到了一个解决方案。您可以发布您的解决方案,以便其他人可以从中受益吗? – salomonderossi

+0

当然,下面贴出了一个答案 – gruntapocalypse

0

宣布在游戏画面脚本中的任何新的变量,如脚本中全球和现在的作品!下面是我加了一下,看到原来的问题进行全码:

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

global GOSURF 
global gobackground 

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

就继续进行变量的全局,我将它们添加到脚本。