1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
== Sugargame ==
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.
What it does:
* Wraps a Sugar activity around an existing Pygame program with few changes
* Allows Sugar toolbars and other widgets to be added to the activity UI
* Provides hooks for saving to and restoring from the Journal
==== 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)
== Using Sugargame ==
See also [[Development Team/Sugargame/Examples]].
==== Wrapping a Pygame program ====
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:
activity/ - Activity directory: activity.info, SVG icon, etc.
sugargame/ - Sugargame package
MyActivity.py - Activity class
mygame.py - Pygame code
setup.py - Install script
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.
self._canvas = sugargame.canvas.PygameCanvas(self)
self.set_canvas(self._canvas)
# Start the game running.
self._canvas.run_pygame(self.game.run)
In your Pygame main loop, pump the GTK message loop:
while gtk.events_pending():
gtk.main_iteration()
==== Adding Pygame to a PyGTK activity ====
To add Pygame to an existing Sugar activity, create a PygameCanvas widget and call
run_pygame on it.
widget = sugargame.canvas.PygameCanvas(self)
vbox.pack_start(widget)
widget.run_pygame(self.game.run)
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().
def main_loop():
clock = pygame.time.Clock()
screen = pygame.display.get_surface()
while self.running:
# Pump GTK messages.
while gtk.events_pending():
gtk.main_iteration()
# Pump PyGame messages.
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
elif event.type == pygame.VIDEORESIZE:
pygame.display.set_mode(event.size, pygame.RESIZABLE)
# Clear Display
screen.fill((255,255,255)) #255 for white
# Draw stuff here
.................
# Flip Display
pygame.display.flip()
# Try to stay at 30 FPS
self.clock.tick(30)
== Support ==
For help with Sugargame, please email the Sugar Labs development list:
: sugar-devel@lists.sugarlabs.org
Sugargame is developed by Wade Brainerd <wadetb@gmail.com>.
It is loosely based on the source code to the olpcgames framework, developed by
the One Laptop Per Child project.
=== Changelog ===
====v1.0====
Initial version of Sugargame
|