首页 > 解决方案 > 你如何检查矩形中的碰撞?

问题描述

你如何检查矩形中的碰撞?
它并没有真正起作用。(我在做什么)

我已经尝试过:

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

但这给出了错误:

 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  

这是我的代码:

玩家:

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

游戏:

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)

我只是期望它会改变关卡并加载一个新关卡,但它这样做了:

 TypeError: Argument must be rect style object

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

标签: pythonpygame

解决方案


文档

colliderect()
测试两个矩形是否重叠
colliderect(Rect) -> bool
如果任一矩形的任何部分重叠(顶部+底部或左+右边缘除外),则返回true。

这意味着colliderect只需要一个应该是 a 的参数Rect
尝试:

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

推荐阅读