diff --git a/examples/asteroids/main.py b/examples/asteroids/main.py index 86721639..0a48b770 100644 --- a/examples/asteroids/main.py +++ b/examples/asteroids/main.py @@ -139,9 +139,11 @@ def on_key_down(key): game.player.turn += 1 if key == keys.RIGHT: game.player.turn -= 1 - if key == keys.SPACE and not game.player.frozen: + if key == keys.SPACE and not game.player.frozen and not is_paused(): sounds.fire.play() game.bullets.append(game.player.fire()) + if key == keys.RETURN: + pause() elif game.stage is GameStage.game_over: if key == keys.BACKSPACE: game.initials = game.initials[:-1] diff --git a/pgzero/builtins.py b/pgzero/builtins.py index 58bd21f8..a223b2d5 100644 --- a/pgzero/builtins.py +++ b/pgzero/builtins.py @@ -11,4 +11,4 @@ from .constants import mouse, keys, keymods -from .game import exit +from .game import exit, pause, is_paused diff --git a/pgzero/game.py b/pgzero/game.py index 33759e1d..4aa00a9c 100644 --- a/pgzero/game.py +++ b/pgzero/game.py @@ -13,7 +13,14 @@ screen = None DISPLAY_FLAGS = 0 +paused = False +def pause(): + global paused + paused = not paused + +def is_paused(): + return paused def exit(): """Wait for up to a second for all sounds to play out @@ -56,7 +63,6 @@ def reinit_screen(self): """ global screen - changed = False mod = self.mod icon = getattr(self.mod, 'ICON', DEFAULTICON) @@ -70,6 +76,7 @@ def reinit_screen(self): w = getattr(mod, 'WIDTH', 800) h = getattr(mod, 'HEIGHT', 600) if w != self.width or h != self.height: + self.need_redraw = True self.screen = pygame.display.set_mode((w, h), DISPLAY_FLAGS) if hasattr(self.mod, 'screen'): self.mod.screen.surface = self.screen @@ -84,8 +91,6 @@ def reinit_screen(self): pygame.display.set_caption(title) self.title = title - return changed - @staticmethod def show_default_icon(): """Show a default icon loaded from Pygame Zero resources.""" @@ -192,9 +197,13 @@ def get_update_func(self): except AttributeError: return None else: - if update.__code__.co_argcount == 0: - return lambda dt: update() - return update + def update_wrapper(dt): + if update.__code__.co_argcount == 0: + update() + else: + update(dt) + self.need_redraw = True + return update_wrapper def get_draw_func(self): """Get a draw function. @@ -261,13 +270,15 @@ def mainloop(self): self.keyboard._release(event.key) self.dispatch_event(event) - pgzclock.tick(dt) + if not paused: + pgzclock.tick(dt) + + if update: + update(dt) - if update: - update(dt) - screen_change = self.reinit_screen() - if screen_change or update or pgzclock.fired or self.need_redraw: + self.reinit_screen() + if pgzclock.fired or self.need_redraw: draw() pygame.display.flip() self.need_redraw = False