我怎样才能修复碰撞?

时间:2017-07-31 00:27:34

标签: python pygame

这是我的碰撞代码。

def collide_with_walls(self, dir):
            if dir == 'x':
                hits = pg.sprite.spritecollide(self, self.game.walls, False)
                if hits:
                    if self.vel.x > 0:
                        self.pos.x = hits[0].rect.left - self.rect.width 
                    if self.vel.x < 0:
                        self.pos.x = hits[0].rect.right
                    self.vel.x = 0
                    self.rect.x = self.pos.x
            if dir == 'y':
                hits = pg.sprite.spritecollide(self, self.game.walls, False)
                if hits:
                    if self.vel.y > 0:
                        self.pos.y = hits[0].rect.top
                    if self.vel.y < 0:
                        self.pos.y = hits[0].rect.bottom
                    self.vel.y = 0
                    self.rect.y = self.pos.y

一切都运作良好,除了它允许我的玩家精灵部分地走到墙内外,这取决于我输入的那一面。

Can walk partially inside wall Can't walk any further

图片1:可以部分地走进墙壁。 图2:不能再走了。

2 个答案:

答案 0 :(得分:2)

您可能应该将角色的精灵向右移动一点,就像使用正x方向一样:

if self.vel.x < 0:
    self.pos.x = hits[0].rect.right + self.rect.width

如果您希望能够靠近墙壁移动,您甚至可以仅将偏移量更改为角色精灵的一半:

if self.vel.x > 0:
    self.pos.x = hits[0].rect.left - self.rect.width//2 
if self.vel.x < 0:
    self.pos.x = hits[0].rect.right + self.rect.width//2

答案 1 :(得分:1)

从它的外观来看,精灵命中框的位置和精灵图像之间似乎存在不对齐。

然而,在不知道精灵对象和spritecollision函数的内部结构的情况下确定发生这种情况的确切原因要困难得多。

尝试在任一方向上将计算偏移半个矩形,看它是否有帮助。