如何正确检查碰撞?

时间:2019-05-18 14:57:23

标签: python pygame

我正在尝试制作基于Tile的游戏,而现在正在砌墙,但无法正常工作

我曾经尝试过pygame.sprite.spritecollideany(self, self.game.walls),但那把玩家困在里面。

游戏:

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()

玩家:

def collideWithWalls(self, dx=0, dy=0):

    if pg.sprite.spritecollideany(self, self.game.walls):
        return True

def move(self, dx=0, dy=0):
    if not self.collideWithWalls(dx, dy):
        self.x += dx * TileSize
        self.y += dy * TileSize

我只是希望它阻止我进去,但是它使我进去却没有离开。

1 个答案:

答案 0 :(得分:3)

仅仅确定玩家的当前位置是否与墙壁碰撞是不够的。您必须检查播放器的新位置是否在墙上。如果确定发生碰撞,则必须放弃机芯:

def move(self, dx=0, dy=0):

    # store current position
    x, y = self.rect.x, self.rect.y

    # move player
    self.rect.x += dx * TileSize
    self.rect.y += dy * TileSize

    # determine collision
    if pg.sprite.spritecollideany(self, self.game.walls):

        # discard movement
        self.rect.x, self.rect.y = x, y