这是我的碰撞代码。你知道吗
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:再也走不动了。你知道吗
您可能应该将角色的精灵向右移动一点,就像您对正x方向所做的那样:
如果希望能够靠近墙移动,甚至可以仅将偏移更改为角色精灵的一半:
从外观上看,似乎有一个精灵击中框和精灵形象之间的定位错位。你知道吗
然而,在不了解sprite对象的内部结构和spritecollision函数的情况下,要精确地找出发生这种情况的确切原因就有点困难了。你知道吗
试着在两个方向上用半个矩形来抵消你的计算,看看是否有帮助。你知道吗
相关问题 更多 >
编程相关推荐