Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/README.txt
blob: e14842fe734b10d70e39ba5961c2efed214a1424 (plain)
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