这是我的碰撞代码。
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
一切都运作良好,除了它允许我的玩家精灵部分地走到墙内外,这取决于我输入的那一面。
图片1:可以部分地走进墙壁。 图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函数的内部结构的情况下确定发生这种情况的确切原因要困难得多。尝试在任一方向上将计算偏移半个矩形,看它是否有帮助。