Простейший параллакс, который зависит от курсора
Перейти к навигации
Перейти к поиску
# пример использования
# image test = Par("bg", "layer1", "layer2")
# или
# show expression Par("bg", "layer1", "layer2") as room
# картинки должны быть разного размера, например,
# 3130х1760, 2614х1470, 2099х1180
# либо одинакового размера, но тогда их нужно увеличивать программно:
# Par(("bg", 1.5), ("layer1", 1.3), ("layer2",1.15))
init python:
# класс для параллакса
class Par(renpy.Displayable):
# инициализация класса
def __init__(self, *args):
super(Par, self).__init__()
self.x, self.y = renpy.get_mouse_pos()
# заполнение данных слоёв
self.images = []
for i in args:
image, zoom = i, 1
if isinstance(i, (tuple, list)):
image, zoom = i[0], i[1]
self.images.append((renpy.displayable(image), zoom))
return
# отрисовка displayable
def render(self, width, height, st, at):
render = renpy.Render(width, height)
# перебираем слои
for image, zoom in self.images:
# рендерим и узнаем размеры
cr = renpy.render(image, width, height, st, at)
w, h = cr.get_size()
w *= zoom
h *= zoom
x2 = self.x - self.x * w * 1. / width
y2 = self.y - self.y * h * 1. / height
# выводим слой на общую картинку
r = renpy.render(image, int(w), int(h), st, at)
render.blit(r, (x2, y2))
# перерисовываем экран
renpy.redraw(self, 0)
return render
# считывание позиции мышки
def event(self, ev, x, y, st):
import pygame
hover = ev.type == pygame.MOUSEMOTION
# click = ev.type == pygame.MOUSEBUTTONDOWN
# mousefocus = pygame.mouse.get_focused()
if hover:
self.x, self.y = x, y
return
- Ссылка на архив с проектом: test_parallax.zip
- Источник: Renpy для чайников: Простейший параллакс, который зависит от курсора
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Renpy для чайников | Вернуться к началу статьи |