Форум Anivisual закрыт. Вы не можете создавать новые темы или писать ответы. Форум будет работать в режиме архива.
Пользователи · Поиск по форуму · · · Регистрация

Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ)
Помощь по Ren'Py (Вопрос\Ответ)

Admin

#1
Сюда пользователи сайта могут писать вопросы о тех или иных функциях движка Ren'Py, а мы попытаемся на них ответить:)

Ikuku

#422
stop_control, не нужно принимать защитную стойку, я не ставлю себе целью вас отругать. Люди часто усложняют задачи, я, к сожалению, не исключение. И важная проблема кодеров (а раз уж вы взялись писать код, то вы кодер) как раз в том, что если "видишь конкретно", то ищешь не подход к решению задачи, а реализацию подхода внутри конкретного функционала, тогда как многое упрощается именно на этапе поиска подхода.

По поводу поворота кнопки: это тоже делается с помощью ATL, чистыми стилями это сделать нельзя. Можете повернуть кнопку целиком, можете повернуть только текст внутри кнопки, во втором случае текстовый объект "раздвинет" квадратную кнопку под свои новые границы.
Код
transform rotated:
    rotate -30

screen test_screen:
    frame:
        vbox:
            button:
                text "BUTTON!" at rotated
                
            textbutton "BUTTON!" at rotated

stop_control

#423
Ikuku, Спасибо )))
От Вас вижу максимальное количество полезной информации. ))

Это не была защитная стойка.
Жаль, если со стороны это воспринимается именно так...

Вся беда в отсутствие нормальной документации по Ренпи.
Везде собрана абсолютная бессистемная мешанина...
Обиднее всего, что когда начинаешь проверять - код не работает. Зачастую пишут какой то ключевой момент, подразумевая, что читатель уже познал все остальное...

"screen test_screen:"
с этой строчкой сижу уже пару дней...

Единственное чего смог добиться - на экране отображается название screen, но не то что я на него загрузил перед показом...

До стилей еще не добрался...

Возможно к моменту когда я переведу 10 минут текста сценария в код я уже начну называть себя кодером, а пока я только изучаю движок и пишу свою книгу найденных и проверенных рецептов.
«Иди пожалуйся своей мамочке»

stop_control

#425
Ikuku, а вот вынос трансформации отдельно с кодом моей кнопки - сработал.
Большое спасибо!
Прикрепления: 5781171.jpg (255.8 Kb)
«Иди пожалуйся своей мамочке»

Ikuku

#426
stop_control, я скорее читер, чем гений, увы)) Мне во многом помогает багаж профильного образования)

Насчет документации - абсолютная правда. Больше всего пользы у меня получилось извлечь из официального форума (https://lemmasoft.renai.us) - там практически каждый вопрос, который я себе задаю, когда-то был задан в той или иной форме, а в процессе поисков ответа можно нацеплять уйму полезных бонусов. Там есть несколько очень добрых, подкованных в теме юзеров, которые разжевывают вопросы от и до. Но на английском, да, увы, не всем удобно.

Насчет экранов - я щас дописываю гайд по screen language, в ближайшее время постараюсь выложить. А пока пара нюансов: кусок кода с transform и screen - собственно, объявление экрана и ATLки, надо вынести изнутри метки, после чего вызвать этот экран уже внутри нее с помощью оператора show с ключевым словом screen. Тут как с переменными - вы где-то там этот экран объявили, а потом используете его там, где нужно.
Код
transform rotated:
    # text text

screen test_screen:
    # text text

label start:
    show screen test_screen
    # text text

Картинки можно создавать с помощью ATLок, и (если я не ошибаюсь) вызывать прямо внутри лэйблов, со скринами такой фокус не прокатит.

stop_control

#427
Ikuku, Буду ждать руководство.
Если Вы не против, я бы стукнулся в Контакте, чтобы не засорять форум "дурацкими" вопросами.
«Иди пожалуйся своей мамочке»

Ikuku

#428
stop_control, каждый дурацкий вопрос экономит время потомкам! Обсуждать вещи вслух более полезно, чем кажется на первый взгляд, тем более, тема для этого и существует)
В любом случае, лично меня в сетях нет, а аккаунт творческой группы контролирую не я, так что лучше в личку сюда, быстрее отвечу.

stop_control

#429
Ikuku, ок.
Вопрос общего вывода графики в ренпи.
Предполагаю, что вывод картинки может идти в screen.

screen в свою очередь идут на Layer master если не указано иное.

Ну и картинки могут идти на Layer master напрямую

В какие контейнеры еще может идти вывод картинок?

Что и во что включено.

Или какие варианты вывода картинки сюда еще не попали?
«Иди пожалуйся своей мамочке»

Ikuku

#430
> screen в свою очередь идут на Layer master если не указано иное.
Не совсем, все экраны по умолчанию выводятся на слое screens, а вот на master, верно, идут те дисплейабл-объекты, которые мы побросали голыми командами show. Т.е. show - master, show screen - screens.

Статичные картинки - это частный случай дисплейабл-объектов. Дисплейаблы бывают разные - конечные объекты, типа картинок и текста, контейнеры, типа frame, window, grid, динамические, на лету склеиваемые из других дисплейаблов. В общем случае на графику (в контексте размещения в окне) распространяются те же правила, что и на прочие дисплейаблы. Их можно:

- выводить в голом виде через оператор show (show expression как вариант) - тогда они падают просто на слой
- класть на экран и выводить вместе с экраном (оператор add)
- запихивать в другой дисплейабл-объект и выводить этот дисплейабл-объект, скажем, внутри экрана

Частные случаи: еще графику можно устанавливать фоном для других дисплейаблов. И еще да, в виде ATL (https://www.renpy.org/doc/html/atl.html#image-statement-with-atl-block), но технически это тот же самый голый image на слое.

stop_control

#431
А если говорить о zorder?
К примеру если задать картинке zorder 100 на какой слой попадет картинка?
Иди это глубина внутри слоя?

Или картинка 1 с zorder 100 на слое мастер, который ниже слоя screens
и картинка 2 на слое screens с zorder 1 - что мы увидим
Какая картинка перекроет другую?
«Иди пожалуйся своей мамочке»

Ikuku

#432
Все верно, zorder - это глубина внутри слоя. Сами слои (master, screens...) не перемешиваются, они (и все, что внутри них) всегда лежат в том порядке, в котором их определили в конфиге. А вот уже порядок содержимого - что на чем лежит - определяется zorder'ом каждого элемента. Либо, если он не указан явно (т.е. по умолчанию = 0), "выше" будет тот элемент, который положили последним (с помощью show/call).

Причем тут еще интересная деталь: картинка, однажды вызванная через show, "запоминает", где лежит, и пока ее не спрячут hide'ом, все последующие show не изменят ее положения. к примеру (псевдокодом буду, уж извиняюсь):

- показать картинку А (А будет сверху)
- показать картинку Б (Б перекроет А, т.к. было вызвано после А)
- показать картинку А в другом "режиме" (как eileen happy из примера) (А останется под Б)
- скрыть А (А пропадет)
- показать А (А появится уже над Б)

Ну, и чем больше zorder, тем выше объект, да.

stop_control

#433
Ikuku,
В чем разница команд renpy

renpy.layer_at_list(at_list, layer='master')

И python эквивалента

show layer layer at at_list statement.

если делают они одно и тоже?

Как не гляну код - всегда жуткая смесь и того и этого.
Мне почему то кажется что можно написать все на командах renpy

Нигде нет полного перечня renpy операторов с примерами на русском?
«Иди пожалуйся своей мамочке»

Ikuku

#434
stop_control, во-первых, небольшая поправка: то, что с renpy.что-то() - это питоновская эквивалентная запись, а то, что без - оператор renpy.

В чем разница? В синтаксисе записи. Плюс, питоновский код можно экранировать и вставить в label, а в обратную сторону это не работает. Больше, собственно, ни в чем, кроме внешнего вида.

Зачем нужны оба варианта? Ну, сначала были только renpy.show(), и выбора просто не было (на самом деле нет, основная часть операторов существовала сразу, но достаточно долгое время у некоторых функций аналогов просто не было (в истории скроллбаров много такого), и приходилось пользоваться питоновским кодом). Следующая причина - см. выше, оператор renpy не запихнешь внутрь питоновского кода. Как только станет необходимо выйти за пределы существующего функционала для своей игры, сразу влипаешь в питоновский код: написание небольших функций, user-defined displayables (да, можно создавать свои типы дисплейаблов), кастомные операторы… т.е само по себе существование двух вариантов записи не только оправдано, но и необходимо в условиях движка.

Почему люди смешивают в кучу то и другое? Это почти вечный вопрос создания хорошего кода в программировании. Кому-то проще, кому-то лень, кому-то не мешает. Какие-то вещи невозможно сделать операторами renpy, а питоновскими вставками делается в одну строку, и писать кастомный эквивалент не имеет большого смысла.

В БК, например, у нас были вот такие фрагменты:
Код
    show expression "images/bg-prologue-b1.jpg"
    $ renpy.transition(dissolve, layer = "master")

Для того, чтобы переход dissolve применялся только к одному слою - на котором лежит графика - и не затрагивал окно диалога. Вообще-то у renpy.transition есть оператор, выполняющий на первый взгляд нужное действие - with (чистый питон-аналог - это with_statement), но with не умеет работать с отдельными фрагментами экрана, он просто будет диссолвить изображение под диалоговой коробкой, а коробка будет исчезать, пока не завершилась анимация. А если сделать window show, чтобы коробка не исчезала, то будет исчезать реплика героя, при оставшейся на экране коробке. В общем, иногда приходится использовать смесь стилей.

Глобально это вопрос вашего личного удобства, примерно как порядок в квартире.

Список операторов на русском… нет, вряд ли. Во-первых, они в любом случае будут разбиты по главам-темам. Небольшой нюанс: в ренпи почти все - операторы. Т.е. вот вы видите show, hide, jump - это оператор. А потом создаете свой экран, и screen - это тоже оператор. И frame: - оператор, и потом еще есть операторы for и if… в общем, очень разные по функциям и поведению операторы бывают, поэтому если составлять список, он будет а) гигантский, б) несистематизированный. А официальная документация дает список операторов, нужный для конкретной главы, в этой самой главе, и часть доков была когда-то переведена, емнип. Но в офдоках периодически плохо с примерами.

stop_control

#435
Ikuku, Проблема уже решена через уровни отображения графики, но возникло подозрение, что я просто что то не нашел...

Вопрос такой.
В ренпи можно вывести картинку и назначить ей маску прозрачности.

А можно ли назначить маску прозрачности видео?
Или контейнеру в котором лежит видео.
«Иди пожалуйся своей мамочке»
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ)
Поиск: