jaden.joeyak
jaden.joeyak

Reputation: 101

How do you check for collision in rects?

How do you check for collision in rects?
It's not really working. (What I'm doing)

I have already tried:

    def goDownStairs(self):
        if self.rect.colliderect(self.rect.right, self.game.stair.rect.left):
            self.level += 1
            self.game.load_data(self.level)

but that gave the error:

 File "/home/hackings/PycharmProjects/Tile_Game/Sprites.py", line 25, in goDownStairs
if self.rect.colliderect(self.rect.right, self.game.stair.rect.left):
 TypeError: Argument must be rect style object  

This is my code:

PLAYER:

def goDownStairs(self):
    if self.rect.colliderect(self.rect.right, self.game.stair.rect.left):
        self.level += 1
        self.game.load_data(self.level)

GAME:

def run(self):
    # game loop - set self.playing = False to end the game
    self.playing = True
    while self.playing:
        self.dt = self.clock.tick(FPS) / 1000
        self.events()
        self.update()
        self.draw()
        self.player.move()
        self.player.goDownStairs()


def load_data(self, level):
    gameFolder = path.dirname(__file__)
    self.mapData = []
    self.level = level
    if level < 4:
        print(level)
        with open(path.join(gameFolder, 'Maps/' + str(level)), 'rt') as f:
            for line in f:
                self.mapData.append(line)

I just expected it to change the level and load a new level, but it did this:

 TypeError: Argument must be rect style object

     if self.rect.colliderect(self.rect.right, self.game.stair.rect.left):

Upvotes: 1

Views: 54

Answers (1)

Valentino
Valentino

Reputation: 7361

From the docs:

colliderect()
test if two rectangles overlap
colliderect(Rect) -> bool
Returns true if any portion of either rectangle overlap (except the top+bottom or left+right edges).

It means colliderect takes only one argument which should be a Rect.
Try with:

self.rect.colliderect(self.game.stair.rect)

Upvotes: 1

Related Questions