2016-04-28 3 views
0

Я делаю игру в стиле аркады, где, если игрок спрайт сталкивается с врагом, он должен закрыть игровой экран и выполнить игру поверх 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() 

Однако всякий раз, когда sprite сталкивается с врагом. Я получаю сообщение об ошибке «NameError: глобальное имя« GOSURF »не определено« "". Не уверен, что делать здесь.

Примечание: Я использовал другое название для поверхности пигмейка в игре по экрану, которая является GOSURF, тогда как исходная поверхность в скрипте игры является только 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: 

будет просто продолжать делать переменные глобальны, как добавить их в сценарий.