Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # пример использования
- # 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:
- import math
- # класс для параллакса
- class Par(renpy.Displayable):
- # инициализация класса
- def __init__(self, *args):
- super(Par, self).__init__()
- self.mouse_x, self.mouse_y = renpy.get_mouse_pos()
- self.actual_x = 0
- self.actual_y = 0
- self.last_st = 0
- # заполнение данных слоёв
- 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
- minimum_speed = 0.5
- maximum_speed = 3
- speed = 1 + minimum_speed
- dx = min(maximum_speed, max(minimum_speed, self.mouse_x - self.actual_x))
- dy = min(maximum_speed, max(minimum_speed, self.mouse_y - self.actual_y))
- st_change = st - self.last_st
- self.last_st = st
- self.actual_x = math.floor(self.actual_x + (self.mouse_x - self.actual_x) * speed * st_change)
- self.actual_y = math.floor(self.actual_y + (self.mouse_y - self.actual_y) * speed * st_change)
- x = self.actual_x - self.actual_x * w * 1. / width
- y = self.actual_y - self.actual_y * h * 1. / height
- # выводим слой на общую картинку
- r = renpy.render(image, int(w), int(h), st, at)
- render.blit(r, (x, y))
- # перерисовываем экран
- 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:
- if (x != self.mouse_x) or (y != self.mouse_y):
- self.mouse_x, self.mouse_y = x, y
- return
Add Comment
Please, Sign In to add comment