2014-01-08 3 views
0

Я делаю игру для окончания моего курса программирования, и иногда у меня появляются более длинные сцены, и цикл не проверяется, если есть событие QUIT, а затем прекратить все и закрыть цикл. Поэтому я думал, что многопоточность поможет, но, похоже, это не похоже на события, я попробовал распечатать - он получает события, но просто не получает событие QUIT.Pygame еще одна тема не получает событие QUIT?

Вот код:

from pygame import * 
from threading import Thread 

def closesearcher(): 
    global running 
    while running: 
     for i in event.get(): 
      if i.type == QUIT: 
       print ("QUIT event in closesearcher") 
       running = False 
       quit() 
       exit() 
     clock.tick(60) 

def main(): 
    init() 
    #True while game is running 
    global running 
    running = True 
    global window 
    window = display.set_mode([640, 480]) 
    global clock 
    clock = time.Clock() 
    #Let's start closesearcher 
    searcherclose = Thread(target = closesearcher) 
    searcherclose.start() 
    scenegame = gamescene() 

def gamescene(): 
    #Render some scenery, wait for user to press button, etc in the following loop 
    while running: 
     for i in event.get(): 
      if i.type == QUIT: 
       print ("QUIT event in game loop") 
     clock.tick(60) 

if __name__ == "__main__": 
    main() 

Любые решения, которые были бы похожа на структуру моего текущего кода? Примечание: я использую Python 3.2

ответ

1

Как насчет фактического выхода из циклов с return вместо того, чтобы печатать только то, что вы получили событие quit?

В настоящее время вы выходите из цикла только в closesearcher, но не в gamescene.

Также, думаю, event.get() удалит мероприятие. Поэтому вызов в другом цикле ничего не вернет. Вам необходимо установить глобальный флаг playerWantsToQuit и использовать его вместо местных running переменных.

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