Development Team/Sugargame: Difference between revisions

No edit summary
 
(7 intermediate revisions by 2 users not shown)
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
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
http://github.com/sugarlabs/sugargame
* 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:
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.


* No support for Pango or SVG sprites (yet)
You can find it in some activities already.  It is so small that the duplication is unimportant.


== 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 128: Line 111:
the One Laptop per Child project.
the One Laptop per Child project.


=== Changelog ===
== Changelog ==


====v1.1====
===v1.1===
* Fix bugs in event handling.  (Pablo Moleri)
* Fix bugs in event handling.  (Pablo Moleri)
* Remove reference to gtk.Socket.get_window() method, which is missing in older versions of PyGTK.
* Remove reference to gtk.Socket.get_window() method, which is missing in older versions of PyGTK.


====v1.0====
===v1.0===
* Initial version of Sugargame
* 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)