Line 2: |
Line 2: |
| | | |
| Sugargame is a Python package which allows [http://www.pygame.org/ Pygame] | | Sugargame is a Python package which allows [http://www.pygame.org/ Pygame] |
− | programs to run well under Sugar. | + | programs to run well under Sugar. |
− | It is fork of the olcpgames framework, which is no longer maintained. | + | It is a fork of olcpgames, which is no longer maintained. |
− | | |
− | http://git.sugarlabs.org/projects/sugargame
| |
| | | |
| What it does: | | What it does: |
Line 13: |
Line 11: |
| * Provides hooks for saving to and restoring from the Journal | | * Provides hooks for saving to and restoring from the Journal |
| | | |
− | ==== Differences between Sugargame and olpcgames ====
| + | Get it from: |
| | | |
− | The olpcgames framework provides a wrapper around Pygame which attempts to
| + | http://github.com/sugarlabs/sugargame |
− | allow a Pygame program to run mostly unmodified under Sugar. To this end,
| |
− | the Pygame program is run in a separate thread with its own Pygame message
| |
− | loop while the main thread runs the GTK message loop. Also, olpcgames wraps
| |
− | Sugar APIs such as the journal and mesh into a Pygame-like API.
| |
| | | |
− | Sugargame takes a simpler approach; it provides a way to embed Pygame into a
| + | And place it within your activity source. It is not part of Sugar. Remember to check back for updates when you are continuing development of your activity. |
− | GTK widget. The Sugar APIs are used to interact with Sugar, the Pygame APIs
| |
− | are used for the game. | |
| | | |
− | Sugargame advantages:
| + | You can find it in some activities already. It is so small that the duplication is unimportant. |
− | | |
− | * Simpler code
| |
− | * More elegant interface between Pygame and GTK
| |
− | * Runs as a single thread: no thread related segfaults
| |
− | * Possible to use Sugar widgets with Pygame
| |
− | | |
− | Sugargame limitations:
| |
− | | |
− | * No support for Pango or SVG sprites (yet)
| |
| | | |
| == Using Sugargame == | | == Using Sugargame == |
Line 42: |
Line 25: |
| ==== Wrapping a Pygame program ==== | | ==== Wrapping a Pygame program ==== |
| | | |
− | To use Sugargame to Sugarize a Pygame program, set up an activity directory and | + | To use Sugargame to Sugarize a Pygame program, set up an activity directory and copy the Sugargame package into it. For an example, see the directory named test, inside the Sugargame repository. It is in fact a Sugargame activity. |
− | copy the Sugargame package to it. | |
| | | |
| The activity directory should look something like this: | | The activity directory should look something like this: |
Line 53: |
Line 35: |
| setup.py - Install script | | setup.py - Install script |
| | | |
− | To make the Activity class, start with test/TestActivity.py from the Sugargame | + | To make the Activity class, start with test/TestActivity.py from the Sugargame distribution. |
− | distribution. | |
− | | |
− | The activity should create a single PygameCanvas widget and call run_pygame on it.
| |
− | Pass the main loop function of the Pygame program.
| |
| | | |
| + | The activity must create a single PygameCanvas widget: |
| self._canvas = sugargame.canvas.PygameCanvas(self) | | self._canvas = sugargame.canvas.PygameCanvas(self) |
| self.set_canvas(self._canvas) | | self.set_canvas(self._canvas) |
− |
| + | |
| + | The activity may assign keyboard focus to the PygameCanvas widget, so that keyboard events generate pygame events: |
| + | self._canvas.grab_focus() |
| + | |
| + | The activity must call the run_pygame method of the PygameCanvas widget, passing the main loop function of the Pygame program. |
| # Start the game running. | | # Start the game running. |
| self._canvas.run_pygame(self.game.run) | | self._canvas.run_pygame(self.game.run) |
| | | |
− | In your Pygame main loop, pump the GTK message loop: | + | In your Pygame main loop, you must pump the GTK event loop: |
| | | |
| while gtk.events_pending(): | | while gtk.events_pending(): |
Line 102: |
Line 85: |
| pygame.display.set_mode(event.size, pygame.RESIZABLE) | | pygame.display.set_mode(event.size, pygame.RESIZABLE) |
| | | |
| + | # Check the mouse position |
| + | x, y = pygame.mouse.get_pos() |
| + | |
| # Clear Display | | # Clear Display |
| screen.fill((255,255,255)) #255 for white | | screen.fill((255,255,255)) #255 for white |
Line 123: |
Line 109: |
| | | |
| It is loosely based on the source code to the olpcgames framework, developed by | | It is loosely based on the source code to the olpcgames framework, developed by |
− | the One Laptop Per Child project. | + | the One Laptop per Child project. |
| | | |
− | === Changelog ===
| + | == Changelog == |
| | | |
− | ====v1.0==== | + | ===v1.1=== |
− | Initial version of Sugargame | + | * Fix bugs in event handling. (Pablo Moleri) |
| + | * Remove reference to gtk.Socket.get_window() method, which is missing in older versions of PyGTK. |
| + | |
| + | ===v1.0=== |
| + | * Initial version of Sugargame |
| + | |
| + | == Differences between Sugargame and olpcgames == |
| + | |
| + | The olpcgames framework provides a wrapper around Pygame which attempts to |
| + | allow a Pygame program to run mostly unmodified under Sugar. To this end, |
| + | the Pygame program is run in a separate thread with its own Pygame message |
| + | loop while the main thread runs the GTK message loop. Also, olpcgames wraps |
| + | Sugar APIs such as the journal and mesh into a Pygame-like API. |
| + | |
| + | Sugargame takes a simpler approach; it provides a way to embed Pygame into a |
| + | GTK widget. The Sugar APIs are used to interact with Sugar, the Pygame APIs |
| + | are used for the game. |
| + | |
| + | Sugargame advantages: |
| + | |
| + | * Simpler code |
| + | * More elegant interface between Pygame and GTK |
| + | * Runs as a single thread: no thread related segfaults |
| + | * Possible to use Sugar widgets with Pygame |
| + | |
| + | Sugargame limitations: |
| + | |
| + | * No support for Pango or SVG sprites (yet) |