Загрузка данных


# В файле screens.rpy
screen main_menu():
    # Динамический фон
    add DynamicBackground("background.jpg")
    
    # Кнопки меню
    textbutton "Начать игру" action Start()
    textbutton "Выход" action Quit()

# В файле script.rpy
init python:
    # Параметры движения
    MOVE_SPEED = 0.05
    DEADZONE = 0.1

    # Класс для динамического фона
    class DynamicBackground(renpy.Displayable):
        def __init__(self, image_tag, **properties):
            super(DynamicBackground, self).__init__(**properties)
            self.image = renpy.display.im.Image(image_tag)
            self.target_x = 0.5
            self.target_y = 0.5

        def render(self, width, height, st, at):
            # Плавное перемещение
            current_x = self.target_x
            current_y = self.target_y
            
            # Получаем размеры экрана
            screen_w, screen_h = renpy.game.interface.screen_size
            
            # Рассчитываем новые координаты
            new_x = current_x + (self.target_x - current_x) * MOVE_SPEED
            new_y = current_y + (self.target_y - current_y) * MOVE_SPEED
            
            # Ограничиваем зону движения
            new_x = max(0.5 - DEADZONE, min(0.5 + DEADZONE, new_x))
            new_y = max(0.5 - DEADZONE, min(0.5 + DEADZONE, new_y))
            
            # Отрисовываем фон
            render = renpy.display.render.Render(width, height)
            render.place(self.image, x=new_x * width, y=new_y * height)
            return render

        def event(self, ev, x, y, st):
            # Обновляем целевые координаты при движении мыши
            if ev.type == renpy.MOUSEMOTION:
                mouse_x, mouse_y = ev.pos
                screen_w, screen_h = renpy.game.interface.screen_size
                self.target_x = mouse_x / screen_w
                self.target_y = mouse_y / screen_h
            return None