我如何解决碰撞?

2024-04-19 08:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的碰撞代码。你知道吗

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 wallCan't walk any further

图1:可以部分走进墙壁。 图2:再也走不动了。你知道吗


Tags: 代码posrectselfgamefalseifdef
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

从外观上看,似乎有一个精灵击中框和精灵形象之间的定位错位。你知道吗

然而,在不了解sprite对象的内部结构和spritecollision函数的情况下,要精确地找出发生这种情况的确切原因就有点困难了。你知道吗

试着在两个方向上用半个矩形来抵消你的计算,看看是否有帮助。你知道吗

相关问题 更多 >