2015-10-20 2 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() 

Im предполагая его все петли в то время, я хотел создать слайд-шоу из 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

Возможно, вам удастся выбрать ответ без необходимости повышать, чтобы отметить вопрос как «ответ» (зеленая галочка?) Я рад, что это сработало для вас. С удовольствием! – Symmitchry

Смежные вопросы