Я думаю, что идея только перерисовать плитки рядом с игроком может работать, но это нужно немного переработать.
Это потребует изменения значений вашей позиции на pygame.math.Vector2
, так что сначала, ятакже рекомендовал бы изменить все экземпляры этих значений на self.pos
, чтобы цикл, который я покажу вам, был проще сделать.
self.pos = pygame.math.Vector2(Position)
Чтобы получить значения x и y, они просто self.pos.x
илиself.pos.y
В коде чертежа вы можете сначала изменить его, чтобы он проходил через каждый спрайт:
for sprite in my_sprites:
pass
Внутри этого цикла вы можете проверить расстояние от спрайта до игрокаиспользуя эти новые векторы:
deltaVec = player.pos - sprite.pos # Find delta [difference] between player position and sprite position
len = deltaVec.length() # Find the length between those two points through the distance formula
Затем, в конце, проверьте, находится ли новое расстояние ниже определенной пороговой величины:
if len < 100: # 100 being the distance, change if needed
sprite.draw()
В конце, новый код рисованиявыглядело бы так:
for sprite in my_sprites:
deltaVec = player.pos - sprite.pos
len = deltaVec.length()
if len < 100: # 100 being the distance, change if needed
sprite.draw()
Это должно перерисовывать только плитки, ближайшие к игроку, и это без необходимости управлять каждой плиткой.