добавить прокрутку в платформер в pygame
в платформеровских играх, игроки перемещаются по уровням, в то время как их положение на экране остается центрированным. Этот эффект достигается за счет прокрутки, который позволяет игровому миру независимо от позиции игрока.
реализация прокрутки:
для реализации прокрутки в Pygame, используйте камеру , который определяет смещение между миром игры и позицией игрока. Это смещение затем применяется к позиции всех игровых сущностей, когда они нарисованы на экране. def __init __ (self, camera_func, ширина, высота): self.camera_func = camera_func self.state = rect (0, 0, ширина, высота) def Apply (Self, Target): return target.rect.move (self.state.topleft) Обновление DEF (Self, Target): self.state = self.camera_func (self.state, target.rect)
] camera_func:
определяет, как камера следует за игроком. Pixels.class Camera: def __init__(self, camera_func, width, height): self.camera_func = camera_func self.state = Rect(0, 0, width, height) def apply(self, target): return target.rect.move(self.state.topleft) def update(self, target): self.state = self.camera_func(self.state, target.rect)
поддержание границ уровня:
def Complex_camera (камера, target_rect): x = -target_rect.center [0] win_width/2 y = -target_rect.center [1] win_height/2 Camera.topleft = (pygame.vector2 ((x, y)) - pygame.vector2 (camera.topleft)) * 0.06 # Добавить немного сглаживания Coolnes Camera.x = max (-(Camera.width-win_width), min (0, camera.x)) Camera.y = max (-(Camera.height-win_height), min (0, camera.y)) Вернуть камеру
] Применение прокрутки на объекты:
class Camera: def __init__(self, camera_func, width, height): self.camera_func = camera_func self.state = Rect(0, 0, width, height) def apply(self, target): return target.rect.move(self.state.topleft) def update(self, target): self.state = self.camera_func(self.state, target.rect)для применения прокрутки, создание класса камеры и вызовите ее обновление и применить в основной игре:
Дополнительные соображения:
class Camera: def __init__(self, camera_func, width, height): self.camera_func = camera_func self.state = Rect(0, 0, width, height) def apply(self, target): return target.rect.move(self.state.topleft) def update(self, target): self.state = self.camera_func(self.state, target.rect)
подкласс для обработки камеры Sprite Groups. нуждается. обрабатывать границы уровня, чтобы не дать игрокам не было экрана.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3