我正在尝试制作基于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
我只是希望它阻止我进去,但是它使我进去却没有离开。
答案 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