Перейти к содержанию

Управление сценами

pygine.scene

Система управления сценами

Scene

Bases: ABC

Базовый класс для игровых сцен.

Source code in pygine/scene.py
class Scene(ABC):
    """Базовый класс для игровых сцен."""

    def __init__(self, name: str):
        self.name = name
        self.active = False

    @abstractmethod
    def update(self, dt: float) -> None:
        """Обновить логику сцены."""
        pass

    @abstractmethod
    def draw(self, screen) -> None:
        """Отрисовать сцену."""
        pass

    def on_enter(self) -> None:
        """Вызывается, когда сцена становится активной."""
        self.active = True

    def on_exit(self) -> None:
        """Вызывается, когда сцена деактивируется."""
        self.active = False

draw(screen) abstractmethod

Отрисовать сцену.

Source code in pygine/scene.py
@abstractmethod
def draw(self, screen) -> None:
    """Отрисовать сцену."""
    pass

on_enter()

Вызывается, когда сцена становится активной.

Source code in pygine/scene.py
def on_enter(self) -> None:
    """Вызывается, когда сцена становится активной."""
    self.active = True

on_exit()

Вызывается, когда сцена деактивируется.

Source code in pygine/scene.py
def on_exit(self) -> None:
    """Вызывается, когда сцена деактивируется."""
    self.active = False

update(dt) abstractmethod

Обновить логику сцены.

Source code in pygine/scene.py
@abstractmethod
def update(self, dt: float) -> None:
    """Обновить логику сцены."""
    pass

SceneManager

Управляет несколькими игровыми сценами.

Source code in pygine/scene.py
class SceneManager:
    """Управляет несколькими игровыми сценами."""

    def __init__(self):
        self.scenes: Dict[str, Scene] = {}
        self.current_scene: Optional[Scene] = None

    def add_scene(self, scene: Scene) -> None:
        """Добавить сцену."""
        self.scenes[scene.name] = scene

    def switch_to(self, scene_name: str) -> bool:
        """Переключиться на указанную сцену."""
        if scene_name in self.scenes:
            if self.current_scene:
                self.current_scene.on_exit()

            self.current_scene = self.scenes[scene_name]
            self.current_scene.on_enter()
            return True
        return False

    def update(self, dt: float) -> None:
        """Обновить текущую сцену."""
        if self.current_scene:
            self.current_scene.update(dt)

    def draw(self, screen) -> None:
        """Отрисовать текущую сцену."""
        if self.current_scene:
            self.current_scene.draw(screen)

add_scene(scene)

Добавить сцену.

Source code in pygine/scene.py
def add_scene(self, scene: Scene) -> None:
    """Добавить сцену."""
    self.scenes[scene.name] = scene

draw(screen)

Отрисовать текущую сцену.

Source code in pygine/scene.py
def draw(self, screen) -> None:
    """Отрисовать текущую сцену."""
    if self.current_scene:
        self.current_scene.draw(screen)

switch_to(scene_name)

Переключиться на указанную сцену.

Source code in pygine/scene.py
def switch_to(self, scene_name: str) -> bool:
    """Переключиться на указанную сцену."""
    if scene_name in self.scenes:
        if self.current_scene:
            self.current_scene.on_exit()

        self.current_scene = self.scenes[scene_name]
        self.current_scene.on_enter()
        return True
    return False

update(dt)

Обновить текущую сцену.

Source code in pygine/scene.py
def update(self, dt: float) -> None:
    """Обновить текущую сцену."""
    if self.current_scene:
        self.current_scene.update(dt)