2017-02-20 6 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() 

第2の例:

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() 

結果が最初の例と同じであるので、第二の例の仕事から定義を作成する方法は? グローバル変数とローカル変数とは関係がありますが、動作させることはできないと考えてください。

+0

programQuitのパラメータに変数programExitと同じ名前を与えないでください。 – Carcigenicate

+0

私はパラメータを削除しましたが、動作させる方法はまだ分かりません。 – Tomasz

答えて

0

ここで、私はあなたが変更されたprogramExit変数は、関数にローカルだったこと

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() 

を修正しました。

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は、この割り当てが関数のスコープ内に新しい変数を作成し、その値を設定していることです。モジュールレベルの変数programExitの値は変更されません。

これを行うより良い方法は、関数がこのような戻り値として結果を返すようにすることです。

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

while programContinue(): 
    pass 

はまた、関数によって返されたブール論理を反転することによって、私は物事が少し明確になると思うと、私たちは「ない」を取り除くことができます。また、このようにwhile節を表現することは、私にとっては少しはっきりしているようです。 'pass'ステートメントは、いくつかのロギングやC ._の答えからの表示更新で置き換えることができます。

関連する問題