功能覆盖另一个功能?

时间:2016-03-10 17:01:11

标签: python pygame

我的程序有问题,基本上我们必须将机器人讨价还价作为一个项目并在最后添加一个单独的功能。我的想法是添加一个选项来改变ai的模型(简单我知道,但我仍然是一个新手)。这是3个主要文件,一个用于主菜单,一个用于精灵选择,一个用于实际游戏。我正在使用pygame,问题在于精灵选择GUI,你可以按1,2或3来加载模型并开始游戏。问题是按下1,2或3时什么都不做。

let rowIndex = self.downloads.indexOf() { $0.id == download.id }                 
let indexPath = NSIndexPath(forRow: rowIndex!, inSection: 0)

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}

这是主菜单键事件功能

class Environment():

    def __init__(self):
        self.surface = graphics.SCREEN
        self.gui_group = pygame.sprite.Group()
        bckImg = pygame.image.load('map1.png') # loading an image of the map
        pygame.font.init()   # font initialisation
        myfont = pygame.font.Font('font1.ttf', 65)  # choosing the font
        myfont1 = pygame.font.Font('font1.ttf', 40)
        myfont2 = pygame.font.Font('font1.ttf', 30)
        myfont3 = pygame.font.Font('font1.ttf', 32)
        title = myfont.render("IT BELONGS IN THE MUSEUM !", 1, (0,0,0))
        startTheGame = myfont1.render("PRESS 'ENTER' TO START", 1, (0,200,0))
        closeTheMenu = myfont2.render("PRESS 'Q' TO QUIT", 1, (180,0,0))
        chooseTheSprite = myfont3.render("PRESS 'C' TO CHANGE THE AI MODEL", 1, (0,100,0))
        self.surface.blit(bckImg, (0,0))  #blitting the background
        self.surface.blit(title, (375,80)) #blitting the title
        self.surface.blit(startTheGame, ((500),700))
        self.surface.blit(closeTheMenu, ((635),885))
        self.surface.blit(chooseTheSprite, ((450,800)))


    def process_input(self):
        for event in pygame.event.get(): # Menu control
            if event.type == pygame.KEYDOWN: 
                if (event.key == K_RETURN):
                    print("START GAME")
                    main.start()
                elif (event.key == K_c):
                    spriteGUI.SpriteGui()

                elif (event.key == K_q): # Quit game
                    pygame.display.quit()
                    pygame.quit()
                    sys.exit()

    def update(self):
        pass

    def render(self):
        self.gui_group.draw(self.surface)
        pygame.display.flip()

这是精灵选择键事件功能。 一旦进入精灵选择菜单,顶部函数的关键事件仍然有效,但第二个函数的关键事件由于某种原因不起作用。我的想法是,第一个功能以某种方式覆盖了第二个功能,但不确定如何解决这个问题。只是说这两个函数在两个不同的文件中分为两个不同的类。我真的很感激帮助,正如我之前所说的,我是一名新手,所以我的编程理解并不是最好的。

谢谢

1 个答案:

答案 0 :(得分:1)

pygame.event.get()将从事件队列中删除所有事件。这意味着当您第一次调用它时,它会删除这些事件,然后迭代它们。如果事件类型不在if / elif部分,则会跳过它。

随后,当您对pygame.event.get()进行第二次调用时,所有先前的事件(即使它们未被执行)都已被删除,因此,只有之后发生的新事件才会被删除队列。

我建议使用可选参数类型或类型列表来仅指定您当时要解析的事件。

请参阅:http://www.pygame.org/docs/ref/event.html#pygame.event.get