Сайт Anivisual.net закрыт

Он продолжит функционировать в виде архива. Новые материалы добавлять нельзя.

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

Упоротые уроки от Славы-сенсей. Урок 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
18
Декабрь
10
4.2
19224
Добавлять комментарии могут только зарегистрированные пользователи.

Комментарии к записи: 10

avatar
#1 DeXP
119
в 14:59 (02/Окт/2014)
0
А вот и нифига! goleft - не быдлокод.

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

И вопрос номер 2: почему goleft - именно label, а не function?
avatar
#2 eliont
1110
в 15:29 (02/Окт/2014)
3
>>что скорее всего и сам является ничем иным а его надстройкой\оболочкой
Не скорее всего а именно этим и является ))

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

Label, screen... они все всё равно как функции работают, просто со специфичными настройками внутри движка.
avatar
#3 Flashback
в 12:54 (28/Ноя/2014)
3
Двигло - это не надстройка, это фреймворк. Смотрите разницу - надстройка над языком программирования - это модуль. Фреймворк - это построенная на языке программирования программа, которая сама по себе ничего не делает. Язык Ren'Py - набор симлинков для удобства написания программного кода, ничего более. В одном и том же окружении работают оба метода структурирования. Посему, программируйте, как скилы позволяют.
avatar
#4 Veneloa
7605
в 17:07 (29/Май/2015)
0
Я ничего не понял. Кроме того что питон может многое...)))
Вы расскажите на пальцах, что нужно сделать, чтобы на питоне кодировать в ренпае?
avatar
#5 eliont
1110
в 18:43 (29/Май/2015)
4
Выучить питон.
avatar
#6 nastia_manko
12294
в 18:30 (19/Ноя/2016)
1
Нипонятно(
пойду учить с++.. wow
avatar
#7 Hantaakai
47954
в 09:26 (04/Дек/2016)
0
А будут продолжения? funny
avatar
#8 СОНЦЕ
93
в 10:55 (27/Дек/2016)
0
Оч маловероятно. Материала достаточно, как и идей для подачи, но мотивация чтоб это сделать, ввиду актуальных новело-строительных тенденций, умножилась на ноль.
avatar
#9 eliont
1110
в 11:32 (27/Дек/2016)
0
Гм, а какие это тенденции?
avatar
#10 СОНЦЕ
93
в 19:12 (27/Дек/2016)
0
Двумя словами - Снобизм и ханжество.