2015-10-20 77 views
0

下面是代碼:pygame的崩潰每次我在窗口中單擊

import pygame, time 

pygame.init() 

white = (255,255,255) 
black = (0,0,0) 
red = (255,0,0) 
green = (0,155,0) 
blue = (0,0,255) 

def button(x,y,w,h,action=None): 
    mouse = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 
    if x+w > mouse[0] > x and y+h > mouse[1] > y: 
     if click [0] == 1 and action != None: 
      if action == "exit": 
       pygame.quit() 
       quit() 

gameDisplay = pygame.display.set_mode((800,600)) 
pygame.display.set_caption("Game") 
clock = pygame.time.Clock() 

gameExit = False 
menu1 = True 
menu2 = True 
gameloop = True 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 

    while menu1: 
     logo1 = pygame.image.load('logo.jpg') 
     gameDisplay.blit(logo1, (1, 1)) 
     time.sleep(2) 
     pygame.display.update() 

     while menu2: 
      logo2 = pygame.image.load("logo2.jpg") 
      gameDisplay.blit(logo2, (0, 0)) 
      time.sleep(2) 
      pygame.display.update() 
      time.sleep(2) 

      while gameloop: 
       gameDisplay.fill(white) 
       button(0, 0, 10,10,"exit") 
       pygame.draw.rect(gameDisplay, red, (0, 0, 10, 10)) 
       pygame.display.update() 
    clock.tick(15) 
pygame.quit() 
quit() 

林承擔其所有while循環,我想創造的2個徽標播放,每次2秒的幻燈片(這作品),但只要我通過幻燈片,我點擊關閉,它崩潰。我嘗試添加一個快捷按鈕(右上角的紅色方塊),並且它也崩潰了。我完全被難倒了,並查看了所有內容,並做出了很多改變,但它崩潰了...請幫助,提前致謝。

回答

0

您的while導致您的問題,因爲你永遠不會擺脫他們。

就我個人而言,我認爲您應該使用當前的pygame.time.get_ticks()來計時您的活動。這裏有一個例子:

# Code above here is unchanged 

gameExit = False 

logo1 = pygame.image.load('logo.png') # Don't load these in a loop! 
logo2 = pygame.image.load('logo2.png') # Only need to load them once. 

# Make sure you record start_time here! Because the timer actually 
# started several seconds before the display is ready. 

start_time = pygame.time.get_ticks()/1000 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 

    time = pygame.time.get_ticks()/1000 
    elapsed = time - start_time 

    gameDisplay.fill(black) 

    if elapsed > 4: 
     gameDisplay.fill(white) 
     button(0, 0, 10, 10, 'exit') 
     pygame.draw.rect(gameDisplay, red, (0, 0, 10, 10)) 
    elif elapsed > 2: 
     gameDisplay.blit(logo2, (0, 0)) 
    elif elapsed > 0: 
     gameDisplay.blit(logo1, (1, 1)) 

    pygame.display.update() 
    clock.tick(15) 

pygame.quit() 
quit() 

我所做的是檢查elapsed時間是否大於4秒。如果是這樣,顯示紅色方塊。如果不是,我們去下一個。是2秒後的時間?如果是這樣,顯示logo2。最後,如果時間是> 0,它在一開始就是正確的,我們顯示logo1。由於if/elif的工作方式,它們的設置順序相反,它只捕獲第一個是True。隨着時間的推移,越來越高的選擇變成True

這有道理嗎?

+0

您可以選擇一個答案而不需要upvote,將問題標記爲「已答覆」(綠色複選標記?)我很高興它爲您工作。我的榮幸! – Symmitchry