2017-02-20 104 views
1

Пожалуйста, смотрите ниже примеры:Как сделать определенную работу?

import pygame 
pygame.init() 
x = 800 
y = 600 
programDisplay = pygame.display.set_mode((x,y)) 
pygame.display.set_caption('Title') 
pygame.display.update() 
programExit = False 
while not programExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True 
pygame.quit() 
quit() 

Второй пример:

import pygame 
pygame.init() 
x = 800 
y = 600 
programDisplay = pygame.display.set_mode((x,y)) 
pygame.display.set_caption('Title') 
pygame.display.update() 
programExit = False 
def programQuit(): 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True 
while not programExit: 
    programQuit() 
pygame.quit() 
quit() 

Как сделать определение из 2-го примера работы, так что результат такой же, как и в первом примере? Думайте, что это может быть связано с глобальными и локальными переменными, но не может заставить его работать.

+0

Не указывайте параметр programQuit с тем же именем, что и переменная programExit – Carcigenicate

+0

Я удалил параметр, но до сих пор не знаю, как заставить его работать. – Tomasz

ответ

0

Здесь я установил ее

import pygame 
pygame.init() 
x = 800 
y = 600 
programDisplay = pygame.display.set_mode((x,y)) 
pygame.display.set_caption('Title') 
pygame.display.update() 
programExit = False 

def checkForProgramQuit(): 
    global programExit 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True 



while not programExit: 
    checkForProgramQuit() 
    programDisplay.fill((255,255,255)) 
    pygame.display.update() 

pygame.quit() 
quit() 

programExit переменных вы модифицированию была локальной функции.

0

Carcigenticate совершенно прав, но вот некоторые заметки о том, что происходит здесь, и о некоторых практиках, которые позволят избежать этого в будущем.

programExit = False 
def programQuit(programExit=False): 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True # Issue 1 

while not programExit: 
    programQuit() 

Проблема 1 заключается в том, что это назначение создает новую переменную в объеме функции и устанавливает ее значение. Он не меняет значение переменной уровня модуля moduleExit.

Лучший способ сделать это - вернуть функцию обратно в качестве возвращаемого значения.

def programContinue(): 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      return False 
    return True 

while programContinue(): 
    pass 

также путем изменения булевой логики, возвращаемой функцией, я думаю, все станет немного яснее, и мы можем избавиться от «не». Также выражение предложения while таким образом кажется мне более ясным. Справку 'pass' можно было бы с пользой заменить на некоторые записи или обновления дисплея из ответа C ._.