n3gative
n3gative

Reputation: 27

Pygame collision between player and block

I'm making a game and I want to check collision between player and block, and push back player if neccesary.

def collide(self,player):
    if self.solid:
        if self.rect.colliderect(player.rect):
            if self.rect.bottom-1 <= player.rect.top and player.pos == 'up':
                player.up = 0
                player.rect.move(0,1)
            if self.rect.top+1 >= player.rect.bottom and player.pos == 'down':
                player.down = 0
                player.rect.move_ip(0,-1)
            if self.rect.left+1 <= player.rect.right and player.pos == 'right':
                player.right = 0
                player.rect.move_ip(-1,0)
            if self.rect.right-1 >= player.rect.left and player.pos == 'left':
                player.left = 0
                player.rect.move_ip(1,0)

but for some reason it doesn't work. Can someone help me? Thanks in advance

Upvotes: 0

Views: 963

Answers (2)

Leif Theden
Leif Theden

Reputation: 85

If you want your objects to be pushed back, then the easiest way is will involve modifying your update() function just a little bit.

Each time you move, record the current position as "self._oldposition" (or something similar) When you collide, you will need to set the current position to the old position (self._oldposition)

This will take care of most of your collision problems.

Upvotes: 0

Johannes Charra
Johannes Charra

Reputation: 29913

Try replacing

def Collide(player,self):

by

def collide(self, player):

if this is a method of some kind of Obstacle class. Just guessing ... :)

Upvotes: 1

Related Questions