Python + Pygame + PygButton检测

时间:2014-03-09 16:13:30

标签: class loops pygame python-3.3

我正在使用Python 3.3与Pygame和PygButton(低代表不允许我超过两个链接) 我的文件目前是[ int.py http://pastebin.com/sDRhieCG]和[ scene.py http://pastebin.com/Y2Mgsgmr]。

想法是使int.py中的主循环越小越好。该代码在mainloop上有一个注释掉的start_screen按钮示例。它可以工作,但是对于每个新的屏幕,主循环都会膨胀。

所以我创建了一个Scene类来应用背景,文本和按钮。它可以工作,但我可以让按钮工作。例如。 bquit按钮不会退出屏幕(就像之前插入主循环时一样)。

我正在尝试在Scene()中创建一个scene_loop()来运行特定场景提供的所有内容。点击一下按钮就可以改变场景等,开始一个新的scene_loop。

我几乎无法在实例化Scene类之后添加特定方法,因此我创建了一个Scene_Start类来处理特定方法,例如scene_loop及其按钮(因为背景很容易通过Scene类放置)。 / p>

我只是陷入困境,在没有废弃所有内容并重新开始的情况下无法找到解决方法。

帮助?

TL; DR: 1. PygButton不在mainloop外工作 2.如何创建一个替换场景的主循环的scene_loop,“unbloating”mainloop(它只会启动应用程序和更改场景)。

谢谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。回答我自己的问题,这样可以对其他人有所帮助。 每个类都有一个sceneloop方法,可以运行并“替换”mainloop。这允许在不影响其他组件的情况下解开并将任何问题隔离到场景中。

主循环:

while True:
    for event in pg.event.get():   
        if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
            pg.quit()
            sys.exit()
    scene.startscreen.draw()
    scene.startscreen.sceneloop()
    pg.display.update()

一个场景示例。这是Scene_Start(Scene)类中的一个方法,实例化为主屏幕中显示的开始屏幕。

def sceneloop(self):
    while self.scene_loop == True:
        for event in pg.event.get():
            if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
                pg.quit()
                sys.exit()
            if 'click' in self.bcreate.handleEvent(event): #CREATE
                startcreate.draw()
                startcreate.sceneloop()
            if 'click' in self.bstart.handleEvent(event): #START
                pg.quit()
                sys.exit()
            if 'click' in self.bload.handleEvent(event): #LOAD
                startload.draw()
                startload.sceneloop()
            if 'click' in self.boptions.handleEvent(event): #OPTIONS
                startoptions.draw()
                startoptions.sceneloop()
            if 'click' in self.bquit.handleEvent(event): #QUIT
                pg.quit()
                sys.exit()
        self.update()