3 <title>tutorial on how to add in tile hit handlers, set up groups and agroups</title>
4 <style type='text/css'><!--
6 border: 1px solid black;
41 .wiki h1, .wiki h2, .wiki h3, .wiki h4, .wiki h5, .wiki h6 {
45 border-bottom: 1px solid #bbbbbb;
73 .wiki code, .wiki pre {
76 border: 1px dashed #888888;
81 border-top: 1px solid #888888;
82 border-left: 1px solid #888888;
83 border-spacing: 0px; border-collapse: collapse;
86 border-bottom: 1px solid #888888;
87 border-right: 1px solid #888888;
92 border-bottom: 1px solid #888888;
93 border-right: 1px solid #888888;
104 <table cellpadding=8><tr><td>
105 <a href='http://www.imitationpickles.org/pgu/'><img src='skin/logo.gif' alt="Phil's pyGame Utilities" border=0></a>
106 <td style='font-size:48px'>Documentation
111 <hr width=500 align=center>
113 <table width='100%'><tr><td valign=top width=120 style='padding-right:6px;border-right: 1px solid black;'>
114 <a href='index.html'>Overview</a><br><br>
115 <strong>Scripts</strong><br>
116 <a href="tileedit.html">tileedit</a>
117 | <a href="leveledit.html">leveledit</a>
118 | <a href="tganew.html">tganew</a>
119 | <a href="levelfancy.html">levelfancy</a>
121 <strong>Reference</strong><br>
122 <a href="algo.html">algo</a>
123 | <a href="ani.html">ani</a>
124 | <a href="engine.html">engine</a>
125 | <a href="fonts.html">fonts</a>
126 | <a href="high.html">high</a>
127 | <a href="html.html">html</a>
128 | <a href="layout.html">layout</a>
129 | <a href="text.html">text</a>
130 | <a href="timer.html">timer</a>
131 | <a href="vid.html">vid</a>
133 <strong>Tutorials</strong><br>
134 <a href="tilevid1.html">1</a>
135 | <a href="tilevid2.html">2</a>
136 | <a href="tilevid3.html">3</a>
137 | <a href="tilevid4.html">4</a>
138 | <a href="tilevid5.html">5</a>
140 <strong>GUI Ref.</strong><br>
141 <a href="gui.theme.html">theme</a>
142 | <a href="gui.style.html">style</a>
143 | <a href="gui.widget.html">widget</a>
144 | <a href="gui.surface.html">surface</a>
145 | <a href="gui.const.html">const</a>
147 <strong>Containers</strong><br>
148 <a href="gui.container.html">container</a>
149 | <a href="gui.app.html">app</a>
150 | <a href="gui.table.html">table</a>
151 | <a href="gui.document.html">document</a>
152 | <a href="gui.area.html">area</a>
154 <strong>Forms</strong><br>
155 <a href="gui.form.html">form</a>
156 | <a href="gui.group.html">group</a>
158 <strong>Widgets</strong><br>
159 <a href="gui.basic.html">basic</a>
160 | <a href="gui.button.html">button</a>
161 | <a href="gui.input.html">input</a>
162 | <a href="gui.keysym.html">keysym</a>
163 | <a href="gui.slider.html">slider</a>
164 | <a href="gui.select.html">select</a>
165 | <a href="gui.misc.html">misc</a>
167 <strong>Other</strong><br>
168 <a href="gui.menus.html">menus</a>
169 | <a href="gui.dialog.html">dialog</a>
171 <strong>Tutorials</strong><br>
172 <a href="gui1.html">1</a>
173 | <a href="gui2.html">2</a>
174 | <a href="gui3.html">3</a>
175 | <a href="gui4.html">4</a>
176 | <a href="gui5.html">5</a>
177 | <a href="gui6.html">6</a>
178 | <a href="gui7.html">7</a>
179 | <a href="gui8.html">8</a>
180 | <a href="gui9.html">9</a>
181 | <a href="gui10.html">10</a>
184 <td valign=top style='padding-left:6px;'>
186 <h1>tutorial on how to add in tile hit handlers, set up groups and agroups</h1>
193 In player_new() I add the player to the 'player' group, and set the score to 0. I also set the game's player to this Sprite.
195 23: s.groups = g.string2groups('player')
199 In player_loop(), I now check if the player has gone off screen (due to blocks
200 in the players way. If that happens, the game quits.
202 32: if s.rect.right < g.view.left: g.quit = 1
204 A few functions are added to handle player/tile hits
206 59:def tile_block(g,t,a):
208 61: if (c['top'] == 1 and a._rect.bottom <= t._rect.top and a.rect.bottom > t.rect.top):
209 62: a.rect.bottom = t.rect.top
210 63: if (c['left'] == 1 and a._rect.right <= t._rect.left and a.rect.right > t.rect.left):
211 64: a.rect.right = t.rect.left
212 65: if (c['right'] == 1 and a._rect.left >= t._rect.right and a.rect.left < t.rect.right):
213 66: a.rect.left = t.rect.right
214 67: if (c['bottom'] == 1 and a._rect.top >= t._rect.bottom and a.rect.top < t.rect.bottom):
215 68: a.rect.top = t.rect.bottom
217 70:def tile_coin(g,t,a):
219 72: g.set((t.tx,t.ty),0)
221 74:def tile_fire(g,t,a):
224 Here I initialize the tile data. The columns are (groups,function,config)
227 94: 0x01:('player',tile_block,{'top':1,'bottom':1,'left':1,'right':1}),
228 95: 0x02:('player',tile_block,{'top':1,'bottom':1,'left':1,'right':1}),
229 96: 0x20:('player',tile_coin,None),
230 97: 0x30:('player',tile_fire,None),
233 In init(), this line has been changed to load the tiles with their properties (groups, functions, and config.
235 109: g.tga_load_tiles('tiles.tga',(TW,TH),tdata)
237 In run(), I have changed the update function to paint, so that
238 I can display the player's score on the screen at all times.
240 141: g.paint(g.screen)
241 142: img = g.font.render('%05d'%g.player.score,1,(0,0,0))
242 143: g.screen.blit(img,(0+1,SH-img.get_height()+1))
243 144: img = g.font.render('%05d'%g.player.score,1,(255,255,255))
244 145: g.screen.blit(img,(0,SH-img.get_height()))
245 146: pygame.display.flip()
252 <hr width=500 align=center>
253 <div align='center'>all content (c) 2006 Phil Hassey - <a href='http://www.imitationpickles.org/pgu/'>Phil's pyGame Utilities</a></div>