Line 1: |
Line 1: |
| == Sugargame == | | == Sugargame == |
| | | |
− | Sugargame is a Python package which allows [http://www.pygame.org/ Pygame] programs to run well under Sugar. | + | Sugargame is a Python package which allows [http://www.pygame.org/ Pygame] |
| + | programs to run well under Sugar. |
| It is fork of the olcpgames framework, which is no longer maintained. | | It is fork of the olcpgames framework, which is no longer maintained. |
| | | |
Line 12: |
Line 13: |
| ==== Differences between Sugargame and olpcgames ==== | | ==== 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. | + | 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 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: | | Sugargame advantages: |
Line 33: |
Line 40: |
| ==== Wrapping a Pygame program ==== | | ==== Wrapping a Pygame program ==== |
| | | |
− | To use Sugargame to Sugarize a Pygame program, set up an activity directory and copy the Sugargame package to it. | + | To use Sugargame to Sugarize a Pygame program, set up an activity directory and |
| + | copy the Sugargame package to it. |
| | | |
| The activity directory should look something like this: | | The activity directory should look something like this: |
Line 43: |
Line 51: |
| setup.py - Install script | | setup.py - Install script |
| | | |
− | To make the Activity class, start with test/TestActivity.py from the Sugargame distribution. | + | To make the Activity class, start with test/TestActivity.py from the Sugargame |
| + | 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 should create a single PygameCanvas widget and call run_pygame on it. |
| + | Pass the main loop function of the Pygame program. |
| | | |
| self._canvas = sugargame.canvas.PygameCanvas(self) | | self._canvas = sugargame.canvas.PygameCanvas(self) |
Line 60: |
Line 70: |
| ==== Adding Pygame to a PyGTK activity ==== | | ==== Adding Pygame to a PyGTK activity ==== |
| | | |
− | To add Pygame to an existing Sugar activity, create a PygameCanvas widget and call run_pygame on it. | + | To add Pygame to an existing Sugar activity, create a PygameCanvas widget and call |
| + | run_pygame on it. |
| | | |
| widget = sugargame.canvas.PygameCanvas(self) | | widget = sugargame.canvas.PygameCanvas(self) |
Line 67: |
Line 78: |
| widget.run_pygame(self.game.run) | | widget.run_pygame(self.game.run) |
| | | |
− | Due to limitations of Pygame and SDL, there can only be one PygameCanvas in the entire activity. | + | Due to limitations of Pygame and SDL, there can only be one PygameCanvas in the |
| + | entire activity. |
| | | |
− | The argument to run_pygame is a function structured like a Pygame program. In the main loop, remember to dispatch GTK messages using gtk.main_iteration(). | + | The argument to run_pygame is a function structured like a Pygame program. In the |
| + | main loop, remember to dispatch GTK messages using gtk.main_iteration(). |
| | | |
| def main_loop(): | | def main_loop(): |