Nov-29-2016, 10:26 PM
Or you can remove the while loop altogether :p
In a recent project, I took all the constructor/destructor pygame nonsense and threw them into a context manager that offers the pygame events as a generator. Could be useful if you're into that sort of thing. Personally, I think it looks a lot cleaner.
In a recent project, I took all the constructor/destructor pygame nonsense and threw them into a context manager that offers the pygame events as a generator. Could be useful if you're into that sort of thing. Personally, I think it looks a lot cleaner.
import pygame class Renderer(object): def __init__(self, resolution, clock_speed=60): self.resolution = resolution self.clock_speed = clock_speed self.screen = pygame.display.set_mode(self.resolution) self.clock = pygame.time.Clock() self.objects = [] def add(self, renderable): self.objects.append(renderable) def clear(self): self.screen.fill(WHITE) def update(self): for obj in self.objects: self.screen.blit(*obj.render()) pygame.display.flip() self.clock.tick() class GUI(object): def __init__(self, renderer): self.renderer = renderer def event_loop(self): running = True while running: self.renderer.clear() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False yield event self.renderer.update() def __enter__(self): pygame.init() return self def __exit__(self, *args): pygame.quit() if __name__ == '__main__': win_size = (500, 500) renderer = Renderer(win_size, 60) # use renderer.add() to add objects with a "render" method # each clock tick, the render() method will be called on those objects # that render() method returns a tuple of (surface_to_blit, (top_left_xpos, top_left_ypos)) with GUI(renderer) as g: for event in g.event_loop(): # event is any pygame event, INCLUDING QUIT, so you can clean up # quit is auto-handled by the generator/context manager mouse_down = pygame.mouse.get_pressed()[0] mouse_pos = pygame.mouse.get_pos() # ...then you do things [button.update(mouse_down, mouse_pos[0], mouse_pos[1]) for button in buttons]