Reputation: 101
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
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