Упоротые уроки от Славы-сенсей. Урок 0: На голом питоне...
Упоротые уроки от Славы-сенсей.

Тут планируется цикл "альтернативных" уроков по РенПи и иже с ним. Там, в соседнем треде, во всю рассказывают про простые, и жизненно необходимые вещи. Тут же будут всякие грязные приемчики чтобы прикрутить всякие свистелки-звенелки способами, за которые любой адекватный кодер вам пальчики пооткручивает. Слава-сенсей не имеет отношения к программированию, и является самым что ни на есть быдлокодером со всеми вытекающими последствиями. Читайте на свой страх и риск. Я Вас предупредило.

Урок 0: "Ложки нет. Пишем на голом питоне"
РенПи связан с Питоном(питон = язык программирования Python) настолько сильно, что скорее всего и сам является ничем иным а его надстройкой\оболочкой. А значит - все что мы пишем стандартным РенПи кодом, можно написать и на питоне. Это существенно усложнит нам жизнь, но откроет дополнительные возможности, недоступные стандартными средствами.
Итак.
(примеры здесь и далее совершенно копипастонепригодны, они тут только для примера уж извините ^^)

Код

scene forest
show vasya
pause 2
hide vasya
show vasya at drunkfadeout
show petya at soberfadein
show pornotvlogo onlayer watermark
jump wastelands


вот так этот же код выглядит в питоне

Код

python:
````renpy.scene()
````renpy.show("forest")
````renpy.show("vasya")
````renpy.pause(2)
````renpy.hide("vasya")
````renpy.show("vasya",at_list=["drunkfadeout"])
````renpy.show("petya",at_list=["soberfadein"])
````renpy.show("pornotvlogo",layer="watermark")
````renpy.jump("wastelands")

````
Ужасно выглядит, не правда ли? с: Но обратите внимание теперь мы все обьявленные картинки вносим в кавычках как обычные строки текста. Теперь мы на их место можем поставить переменные, и оперировать ими как желаем.

Вот чоткий пример того, как это можно эксплуатировать. Вот кусочек кода из "облачи нястеньку". Его задача - выполнить перемещение игрока на локацию слева. выполняется каждый раз когда игрок перемещается меж локациями.

Код

label goleft(p_to,p_from=here,p_whoin="",p_whoout=with_who,nojump=False):
````python:
````````renpy.hide(p_from)
````````renpy.show(p_from,at_list=[toleft])
````````if p_whoout<>"":
````````````renpy.hide(p_whoout)
````````````renpy.show(p_whoout,at_list=[s_toright])
````````````with_who = ""
````````renpy.show(p_to, at_list=[fromright])
````````if p_whoin<>"":
````````````renpy.show(p_whoin,at_list=[s_fromleft])
````````renpy.pause(1)
````````renpy.scene()
````````renpy.show(p_to)  
````````if p_whoin<>"":
````````````renpy.show(p_whoin,at_list=[top])
````````````with_who = p_whoin
````````here = p_to
````````if not nojump:
````````````renpy.jump("r_%s" %p_to)
````return


Теперь тоже самое только с построчными комментариями

Код

label goleft(p_to,p_from=here,p_whoin=r_who[p_to],p_whoout=with_who,nojump=False):
#назначаем закладку с уточняющими переменными. закладка "пойти налево"
#переменные p_to - локация куда идти, p_from - откуда(по умолчанию - отсюда)
# p_whoin,p_whoout (персонажи которые возможно находятся или в соседней локации или на экране сейчас)
# nojump - если True - перехода на обьявленую строчку не будет, выполнение кода продолжится со следующей строки.(обычно идет переход на строки с локации, куда герой переходит)
# все это будет использоватся вместо текста в кавычках показанного выше. пристегнитесь.
````python: # все отступленное после этой команды будет читатся как если перед ним добавлять $
````````renpy.hide(p_from)  
````````# cбрасываем переходы задника который у нас сейчас уплывет направо
````````renpy.show(p_from,at_list=[toleft])  
````````# вот он направо уплывает.  
````````# toleft (и далее fromright, s_toright, s_fromleft) - это transform-ы обьявленые стандартными средствами
````````if p_whoout<>"": # если перед этим задником был персонаж
````````````renpy.hide(p_whoout)  
````````````# сбрасываем переходы персонажа
````````````renpy.show(p_whoout,at_list=[s_toright])  
````````````# персонаж уплывает направо.````  
````````````with_who = ""  
````````````# обьявляем, что перед нами персонажа больше нет
````````renpy.show(p_to, at_list=[fromright])  
````````# задник соседней комнаты приплывает слева
````````if p_whoin<>"": # если на соседней локации кто-то есть
````````````renpy.show(p_whoin,at_list=[s_fromleft])  
````````````# то пускай он тоже приплывет слева
````````renpy.pause(1)  
````````# пауза необходимая чтобы все уплыли/приплыли
````````renpy.scene()  
````````# сбрасываем все переходы всех спрайтов
````````renpy.show(p_to)  
````````# показываем статичный задник новой комнаты
````````if p_whoin<>"": # а если там еще был и персонаж
````````````renpy.show(p_whoin,at_list=[top])  
````````````# рисуем статично и его тоже
````````````with_who = p_whoin  
````````````# и обьявляем что с нами теперь он
````````here = p_to # обьявляем, что мы теперь находимся в комнате что была слева.
````````if not nojump: # если мы этого не запретили...
````````````renpy.jump("r_%s" %p_to)  
````````````# перепрыгиваем на закладку с локацией, куда мы переместились, от куда игра продолжится
````return # конец закладки.


Теперь эту махину можно многократно использовать с помощью команды:
````call goleft("куда")
````# и, если нужны дополнительные опции например
````# call goleft("куда", p_from = "ниоткуда", p_whoout = "нястенька", nojump = True)

вот фрагмент когда где оно вызывается

Код

label r_toyroom:
````call screen m_move(left = r_who["toyroom"] == "", right = r_who["toyroom"] == "", read = r_who["toyroom"] == "", talk = r_who["toyroom"] == "marina")
````$ r = _return
````if r == "left":
````````call goleft("kitchen") ####### ВОТ ТУТ

````elif r == "right":
````````if battle or not lv3_nyastya:
````````````call goright("dressroom")
````````else:
````````````call goright("library")


вот наглядно как это работает.
http://youtu.be/qRaXhk0ZVws?t=1m46s

подозреваю, самая распространенная реакция будет "я ничего не понял!". Не расстраивайтесь. То что Вам сейчас нужно понять - это то, что питон может многое =3
Читайте мануалы, и да прибудет с вами сила! Вот наиболее релевантный.
http://www.renpy.org/doc/html/statement_equivalents.html

Автор материала: Lena_Borodach
Материал от пользователя сайта.



Ren'Py 02.10.14 8187 Lena_Borodach 4.5/8

Комментарии (7):
0
1 DeXP   (02.10.14 15:59)
119
А вот и нифига! goleft - не быдлокод.

Вопрос: можно ли комбинировать Python- и RenPy-код? Например, у меня есть питоновская функция с renpy.scene() и кучей математики. И из неё хочу сделать вызов типа: "show PersName at left with dissolve: xalign 0.55 yalign 1.0"

И вопрос номер 2: почему goleft - именно label, а не function?

3
2 eliont   (02.10.14 16:29)
1110
>>что скорее всего и сам является ничем иным а его надстройкой\оболочкой
Не скорее всего а именно этим и является ))

>>можно ли комбинировать Python- и RenPy-код?
Можно, если представить команды ренпи как код (например не show, а renpy.show() ).

Label, screen... они все всё равно как функции работают, просто со специфичными настройками внутри движка.

2
3 Flashback   (28.11.14 13:54)
Двигло - это не надстройка, это фреймворк. Смотрите разницу - надстройка над языком программирования - это модуль. Фреймворк - это построенная на языке программирования программа, которая сама по себе ничего не делает. Язык Ren'Py - набор симлинков для удобства написания программного кода, ничего более. В одном и том же окружении работают оба метода структурирования. Посему, программируйте, как скилы позволяют.

0
4 Veneloa   (29.05.15 18:07)
7605
Я ничего не понял. Кроме того что питон может многое...)))
Вы расскажите на пальцах, что нужно сделать, чтобы на питоне кодировать в ренпае?

3
5 eliont   (29.05.15 19:43)
1110
Выучить питон.

0
6 nastia_manko   (19.11.16 19:30)
12294
Нипонятно(
пойду учить с++.. wow

0
7 Hantaakai   (04.12.16 10:26)
47954
А будут продолжения? funny

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]