I am a beginner at pygame/python and classes but I have been following a tutorial to create a top down game (https://www.youtube.com/playlist?list=PLkkm3wcQHjT7gn81Wn-e78cAyhwBW3FIc). I have done the enemy collisions part, but I want to add coin collection, powerups, items etc. in my game.
This is the code for enemy collisions in my Player class:
def collide_enemy(self): hits = pygame.sprite.spritecollide(self, self.game.enemies, False) if hits: #if hits it will remove player from screen self.kill() self.game.playing = FalseThis is in my Coins class (different file):
def update(self): self.animate() self.collide_player() def collide_player(self): coins_count = 0 hits = pygame.sprite.spritecollide(self, self.game.coins, False) if hits: self.kill() #to check if it will remove player and is working coins_count += 1 print(coins_count)And this is where the group is created for layering and creating my tilemap in my Game class (also diff. file):
def new_game(self): #a new game starts self.playing = True self.all_sprites = pygame.sprite.LayeredUpdates() self.blocks = pygame.sprite.LayeredUpdates() self.enemies = pygame.sprite.LayeredUpdates() self.platforms = pygame.sprite.LayeredUpdates() self.coins = pygame.sprite.LayeredUpdates() self.createTilemap() The code works, but it just doesn't remove from the screen or even print out a coin count when I was seeing if it would collide with it atleast.
I am unsure whether it is my parameters where I went wrong, or just something else as a whole. If anyone could please give me some advice on how to remove the sprite image when my player collides with it and add it to a coin count where I can use it in other parts of my game, I would really appreciate it!If you need more code, please do ask because I am unsure on what else to give.
This is all of my Coins class if needed:
class Coins(pygame.sprite.Sprite): def __init__(self, game, x, y): self.game = game self._layer = COIN_LAYER #tell pygame in what layer the sprite will appear #the bottom line does not draw my coins on screen #self.groups = self.game.all_sprites, self.game.coins self.groups = self.game.all_sprites pygame.sprite.Sprite.__init__(self,self.groups) #adding coins to allsprites groups self.x = x * TILESIZE - OFFSET_X self.y = y * TILESIZE - OFFSET_Y self.width = TILESIZE self.height = TILESIZE self.animation_loop = 1 #creating a rect that is calling the method and then setting the cut out self.image = self.game.coin_spritesheet.get_sprite(6, 7, self.width, self.height) self.rect = self.image.get_rect() self.rect.x = self.x self.rect.y = self.y def update(self): self.animate() self.collide_player() def collide_player(self): coins_count = 0 hits = pygame.sprite.spritecollide(self, self.game.coins, False) if hits: self.kill() #to check if it will remove player and is working coins_count += 1 print(coins_count) def animate(self): rotating_coin = [self.game.coin_spritesheet.get_sprite(4, 4, self.width, self.height), self.game.coin_spritesheet.get_sprite(37, 4, self.width, self.height), self.game.coin_spritesheet.get_sprite(70, 4, self.width, self.height), self.game.coin_spritesheet.get_sprite(104, 4, self.width, self.height), self.game.coin_spritesheet.get_sprite(131, 4, self.width, self.height), self.game.coin_spritesheet.get_sprite(163, 4, self.width, self.height) ] self.image = rotating_coin[math.floor(self.animation_loop)] self.animation_loop += 0.1 if self.animation_loop >= 6: self.animation_loop = 1