我正在使用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(它只会启动应用程序和更改场景)。
谢谢。
答案 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()