Как реализовать камеру на pygame?
Недавно начал писать 2D платформер, используя библиотеку pygame, но столкнулся с маленькой проблемой в лице камеры. Ниже приведён код простейшей камеры, которая всегда держит персонажа в центре экрана и передвигает все объекты на карте, основываясь на его действиях. Проблема в том, что иногда камера показывает больше, чем нужно. (Вот в такие моменты)
Буду очень благодарен, если вы предложите варианты доработки нижеприведенного кода или хотя бы концепт иного подхода, удовлетворяющего поставленные цели. Если для решения нужны дополнительные материалы, пишите в комментариях, добавлю всё, что потребуется.
# Класс камеры
class Camera:
# Зададим начальный сдвиг камеры
def __init__(self, field_size):
self.dx = 0
self.dy = 1
self.width = field_size[0]
self.height = field_size[1]
# Сдвинуть объект obj на смещение камеры
def apply(self, obj):
obj.rect.x += self.dx // 2
obj.rect.y += self.dy // 2
return obj.rect.x, obj.rect.y
# Позиционировать камеру на объекте target
def update(self, target):
self.dx = (-target.rect.centerx + SIZE[0] // 2)
self.dy = (-target.rect.centery + SIZE[1] // 2)
Ответы (1 шт):
Если у вас отображение картинки уже привязано к местоположению камеры, тогда вы можете просто приравнивать координаты камеры к координатам центра игрока (но относительно карты), также если перемещать камеру на расстояние, разделенное на число, то можно добиться плавности камеры, и вот формула, которая может помочь вам:
camera.x = round((camera.x-player.x)/10)
camera.y = round((camera.y-player.y)/10)
Почему лучше использовать round()?
- Потому что когда игрок будет стоять на месте, камера будет неприятно перемещаться по одному пикселю при местоположении, очень близком к игроку.