# В файле 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