def check_collision_tiles(self, coll_layer): tile_rects = util.neighbour_tiles(self.rect.center, coll_layer) collision = self.rect.collidelist(tile_rects) if(collision != -1): tile_rect = tile_rects[collision] if(self.direction == DOWN and self.rect.bottom > tile_rect.top): self.rect.bottom = tile_rect.top - 1 elif(self.direction == RIGHT and self.rect.right > tile_rect.left): self.rect.right = tile_rect.left - 1 elif(self.direction == LEFT and self.rect.left < tile_rect.right): self.rect.left = tile_rect.right + 1 elif(self.direction == UP and self.rect.top < tile_rect.bottom): self.rect.top = tile_rect.bottom + 1 self.collision_rect.center = self.rect.center
def update(self, deltat, screen, events): for event in events: down = event.type == pygame.KEYDOWN if event.key == pygame.K_RIGHT : self.hero.xSpeed = down * 6 elif event.key == pygame.K_LEFT : self.hero.xSpeed = down * -6 elif event.key == pygame.K_UP : self.hero.ySpeed = down * -6 elif event.key == pygame.K_DOWN : self.hero.ySpeed = down * 6 elif event.key == pygame.K_ESCAPE and down: return util.STATE_NewGame elif event.key == pygame.K_F1 and down : self.debug = not(self.debug) enemies = self.enemies hero = self.hero # update enemies enemies_view = [] for enemy in enemies: enemy.update(deltat) enemies_view.append(enemy.view) # update hero and camera hero.update(deltat, self.level.sprite_layers[2]) self.update_camera() # draw the stuff for sprite_layer in self.level.sprite_layers: if sprite_layer.is_object_group: continue else: self.renderer.render_layer(screen, sprite_layer) # draw debug data to show collision boxes if self.debug: # calculate where on the camera it should be camera_left = self.renderer._cam_rect.left camera_top = self.renderer._cam_rect.top for enemy_view in enemies_view: view = enemy_view.copy() view.left -= camera_left view.top -= camera_top pygame.draw.rect(screen, (255, 0, 0), view, 1) hero_rect = hero.collision_rect.copy() hero_rect.left -= camera_left hero_rect.top -= camera_top pygame.draw.rect(screen, (0, 0, 255), hero_rect, 1) # haha, or not. you lost! collision = hero.collision_rect.collidelist(enemies_view) if collision != -1: camera_left = self.renderer._cam_rect.left camera_top = self.renderer._cam_rect.top view = enemies_view[collision].copy() view.left -= camera_left view.top -= camera_top pygame.draw.rect(screen, (255, 0, 0), view, 3) return util.STATE_GameOver # maybe you did it? tiles = util.neighbour_tiles(hero.rect.center, self.level.sprite_layers[3]) if(hero.rect.collidelist(tiles) != -1): if self.next_level() == False: return util.STATE_GameComplete return util.STATE_InGame