2016-04-28 240 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: 

就繼續進行變量的全局,我將它們添加到腳本。