2015-11-23 23 views
0

У меня есть некоторые проблемы с бросить Pygameвидеосистема не инициализировать Pygame

, когда я пытаюсь закрыть окно, он говорит мне Видеосистема не инициализируется я не знаю, как упаковать изображение здесь, извините. Ошибка происходит в соответствии с маркировкой «!!!!!»

вот мой код

# PreTitleScreen 

# cited from http://programarcadegames.com/python_examples/ 
# f.php?file=sprite_collect_blocks.py 
# the framework of this file are mostly cited from the above address 


import pygame, configure, instructions, game 

# constant 
PTS_WIDTH = 1024 # pre screen width 
PTS_HEIGHT = 768 # pre Screen height 

class TitleScreen(): 
    def __init__(self): 
     self.c = configure.Configure() 
     done = False 
     pygame.init() 
     clock = pygame.time.Clock() 

     while not done: 
      self.screen = pygame.display.set_mode([PTS_WIDTH,PTS_HEIGHT]) 
      pygame.display.set_caption("Bomberman") 

      # import background image 
      bgImagePath = self.c.IMAGE_PATH + "titleScreen.png" 
      bgImage = pygame.image.load(bgImagePath).convert() 
      bgImage = pygame.transform.scale(bgImage,(PTS_WIDTH,PTS_HEIGHT)) 
      self.screen.blit(bgImage,[0,0]) 

      pygame.mixer.music.load(self.c.AUDIO_PATH + "title.mid") 
      pygame.mixer.music.play() 

      # pygame.display.flip() 
      notValidOp = False 
      # under valid control mode 
      while not notValidOp: 
       print("enter the inner loop") 
       # get mouse position 
       pos = pygame.mouse.get_pos() 
       # testCode 
       for event in pygame.event.get(): 
        # deal with the exit 
        print('event.type', event.type) 
        if event.type == pygame.QUIT: 
         print("quit") 
         notValidOp = not notValidOp 
         done = not done 

        elif event.type == pygame.MOUSEBUTTONDOWN: 
         print("get from general",pos) 
         if self.inBoundary(pos[0],pos[1],25, 500, 250, 550): 
          self.playGame("S") 

         elif self.inBoundary(pos[0],pos[1],25, 550, 250, 600): 
          self.playGame("M") 

         elif self.inBoundary(pos[0],pos[1],25, 600, 250, 650): 
          self.instructions() 

         elif self.inBoundary(pos[0],pos[1],25, 650, 250, 700): 
          print("high Score") 
          print("get from score",pos) 

         elif self.inBoundary(pos[0],pos[1],40, 700, 250, 750): 
          print("exit") 
          done = not done 
          notValidOp = not notValidOp 

       # Go ahead and update the screen with what we've drawn. 
       pygame.display.flip() # !!!!!!!!!!!!!! 

       # Limit to 60 frames per second 
       clock.tick(self.c.FPS) 


    def inBoundary(self,x0,y0,x1,y1,x2,y2): 
     if ((x1 <= x0 <= x2) and (y1 <= y0 <= y2)): 
      return True 
     return False 

    def instructions(self): 
     instructions.Instructions() 

    def playGame(self,mode): 
     game.Game(mode) 

# pygame.init() 
# test Code below 
TitleScreen() 

ответ

0

не может быть правильная проблема, но я уверен, что вы должны выйти из игры (в вашем if event.type == QUIT: раздел) как так:

if event.type == QUIT: 
    pygame.quit() 
    sys.exit() 

Кроме того, если вы не import pygame.locals as * то вы, возможно, придется использовать pygame.locals.QUIT вместо QUIT.

+0

См. Комментарии выше. это одно из больших различий между версией python 3 и python 2 –

+0

Эй, круто. Однако, я считаю, вам все равно придется называть 'sys.exit()'. Плюс, посмотрите на ответ Ллота. – imyxh

+0

HI, я решил проблему. Собственно, на самом деле это уже не нужно. Я знаю, что мы должны использовать .exit() в python 2, но уже не в версии Pygame для python 3. просто установите сделанное, чтобы это не было сделано, все в порядке. Это похоже на систему сбора мусора, вы можете явно выйти из нее, но не обязательно. –

0

Обычно это происходит, когда вы звоните pygame.quit(), а затем звоните по телефону pygame.display.flip().

Вы не указали полный код, но не вызываете pygame.display.flip() после звонка pygame.quit().

+0

Фактически, в соответствии с документом, нам не нужно вызывать pygame.quit() в версии python3, поэтому я просто этого не делаю. Я не знаю, где проблема –

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