Пример Drag-and-Drop из документации RenPy с парой доработок
Перейти к навигации
Перейти к поиску
init python:
# время на перемещение
move_t = .25
# Функция, которую назначим для обработки результатов перемещений
def drag_to(drags, drop):
# Не попали в пределы города
if not drop:
return
# Запоминаем, что куда переместили
store.detective = drags[0].drag_name
store.city = drop.drag_name
# выравниваем положения детектива и города
drags[0].snap(drop.x, drop.y, move_t)
# устанавливаем флаг конца действия,
# чтобы таймер сработал
store.drag_ok = True
# чтобы таймер вообще запустился
renpy.restart_interaction()
# превратить в action для кнопок
DragTo = renpy.curry(drag_to)
screen choose_city:
# Карта в качестве фона.
add "EUROPE"
# Группа drag гарантирует, что детективов и города можно перетащить друг на друга.
# (в нашем случае только детективов на города, у городов draggable False)
draggroup:
# Наши детективы
drag:
drag_name "Еву"
child "ivy"
droppable False
dragged drag_to
xpos 100 ypos 100
drag:
drag_name "Зака"
child "zack"
droppable False
dragged drag_to
xpos 150 ypos 200
# Города, куда можно направить детективов.
drag:
as london
drag_name "Лондон"
child "LONDON"
draggable False
xpos 500 ypos 150
# В этот квадрат можно перетаскивать
xysize(300, 300)
drag:
as paris
drag_name "Париж"
draggable False
child "PARIS"
xpos 200 ypos 500
# В этот квадрат можно перетаскивать
xysize(300, 300)
# Этот персонаж может перемещаться и сам по нажатию кнопки,
# если установить ему и городам идентификаторы с помощью as
drag:
as carmen # идентификатор
droppable False
dragged drag_to
drag_name "Кармэн"
xpos 600 ypos 600
frame:
style "empty"
vbox:
text "\nКАРМЭН" style "names" color "#8af"
# кнопки имитируют перетаскивание в нужный город
textbutton "Лондон" action DragTo([carmen], london)
textbutton "Париж" action DragTo([carmen], paris)
# если выбор сделан, то ждем окончания перемещения,
# затем ещё немного на осознание игроком происходящего
# и выходим из экрана
if drag_ok:
timer move_t + .75 action Return()
label start:
# сбрасываем флаг конца действия
$ drag_ok = False
centered "Кого нам отправить и куда? Перетащите Кармэн, Еву или Зака в нужный город."
# вызываем экран с выбором города
call screen choose_city
centered "Хорошо, мы пошлём [detective] в [city]."
return
# Чтобы обойтись без картинок, раскрасим квадратики:
init:
# стиль для имён
style names is text:
size 60
bold True
color "#fff"
image EUROPE = "#002"
image LONDON:
contains:
"#004"
xysize(300, 300)
contains:
Text("ЛОНДОН", style="names")
image PARIS:
contains:
"#053"
xysize(300, 300)
contains:
Text("ПАРИЖ", style="names")
image ivy = Text("\nЕВА", style="names", color="#0f8")
image zack = Text("\nЗАК", style="names", color="#ff0")
Источник: Renpy для чайников: Пример Drag-and-Drop из документации RenPy с парой доработок
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Renpy для чайников | Вернуться к началу статьи |