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

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

Admin

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

Ikuku

#392
mrWebster, для того, чтобы выводить дисплэйаблы без объявления, есть хитрое ключевое слово expression. Вроде такого:
Код
show expression im.MatrixColor("lorraine.jpg", im.matrix.hue(45))

Принимает любые дисплэйаблы, просто строку с адресом картинки тоже. Но, кмк, если спрайт будет использоваться больше двух раз, лучше объявить, запихать в переменную и не таскать большие куски кода туда-сюда. Если один-два раза, то можно и через expression, беды не будет.

И спасибо, взаимно :)

Larsy

#393
Прошу прощения за беспокойство, и, возможно, глупый вопрос.
При старте игры хочу сделать что-то типа вступления. Текст - без объявления
характера. Просто текст от автора. Картинка в качестве фона для окна диалога.
К примеру - какое-то изображение с названием "dialog_window_01.png".
Такое расположение нужно только для предисловия.
Вот макет желаемого результата:
Прикрепления: 2452335.jpg (162.5 Kb)
Сообщение отредактировал Larsy - Четверг, 24/Авг/2017, 12:12

dmit

#394
Можно использовать отдельный экран:
Код
screen view_txt:
    frame:
        yfill True
        xpos 0.5
        background "dialog_window_01.png"
        add Text("Text Text\ntext text")
label start:
    show screen view_txt
    pause(5.0)
    hide screen view_txt

первое что пришло на ум, а вообще-то можно различными способами ))
планета FOREVER!!!      Unkenbro team

Larsy

#396
Спасибо за ответы. Оба варианта работают. )
Неделю, как только начал изучать Ren'Py, и туплю еще, даже когда что-то делаю по готовому уроку.

Runf

#397
Нужно сделать инвентарь и возможность перемещения по локациям. Проблема в следующем, идут постоянные диалоги и просто невозможно мышью никуда кликнуть. $renpy.pause() убирает диалоговое окно, но после нажатия мыши сразу идет либо следующая фраза, либо выкидывает в главное меню. Что делать?

Runf

#398
Ага, про перемещения разобрался здесь http://anivisual.net/blog/2014-09-27-62
Но если поставить textbutton, то она отображается поверх фона, но нажать на нее невозможно, пока идет диалог, а в конце диалога выкидывает в главное меню. Что делать?

mrWebster

#399
Runf, если тебе нужно, чтобы при отсутствии вывода текста, сохранялся текстбокс, то используй следующую команду:
Код
window show

Вообще, window имеет три положения. Если текстбокс скрывается сам, то он в положении auto.
Касательно меню: я так понял, ты делаешь его не через классическую команду, да? Ну, если тебе так хочется проблем (шучу), то попробуй сделать его через экраны. dmit выше скидывал пример объявления экрана. Воспользуйся его примером как основой, а потом, в процессе игры, сделай необходимый вызов.
В главное меню выкидывает потому, что программа достигает команды return, которая завершает игру. Добавь рандомного текста на вывод.
Добро пожаловать во Мрак!

Runf

#400
Ага, понял. Если поставить renpy.imagemap, то можно не только горячие точки установить, но и textbutton к примеру. Просто глупо это делать, если мне нужны только кнопки.
Цитата
window show

Прикольная команда, не знал. но нет, не нужно.
Цитата
Касательно меню: я так понял, ты делаешь его не через классическую команду, да?

Представления не имею, какая классическая, а какая нет.
Я нашел способ, как в примере выше:
screen view_txt:
...
label start:
show screen view_txt
Только внутри кнопки, а не текст. Но только он не работает, в диалоговом окне, печатается текст, а кнопки конечно можно использовать, только желательно бы это делать без диалогового окна. Не посреди беседы, а в конце ее хотелось бы пользоваться меню. imagemap полностью решает проблему, но нет ли какого более простого способа?

Runf

#401
И как можно реализовать, чтобы пауза в репликах диалога была в 2 секунды? В смысле сказал персонаж А фразу, мы нажали пробел и через 2 секунды выводится фраза персонажа Б. Поясню, что спрашиваю не о скорости вывода текста, а о паузах между репликами..

Ikuku

#402
По поводу карты: если нужно настраивать внешний вид, то удобнее всего это сделать через screen language, т.е. как в примере выше - создать экран, накидать на него кнопки для перехода. Но тут есть одна хитрость: чтобы экран "карты" выводился не фоном, параллельно с диалогами, а обязательно требовал реакции пользователя, надо ему в свойствах прописать параметр modal True. Вот так:
Код
screen my_map:
    modal True

    frame:
  # кнопки
  textbutton "Школа" action [ Jump("school_label"), Hide("my_map") ]

label start:
    # диалоги до вывода карты

    show screen my_map

    # что-то еще

Т.е. когда нужный диалог заканчивается, и пришло время перемещаться по локациям, выводим модальный экран-карту, которая будет блокировать любые действия вне себя (в том числе и перемотку диалогов), пока не будет скрыта с экрана. А скрывать ее можно по нажатию кнопок-переходов в локацию (см. пример, в экшене два действия: переход на метку school_label и скрытие экрана).

Если кастомный вид карты не нужен, переход можно организовать с помощью стандартного меню выбора:
Код
label start:
    # диалоги до вывода карты

    menu:
  "Перейти в школу":
   jump school_label
  "Перейти на рынок":
   jump market_label

По второму вопросу... Тут есть несколько путей решения, зависит от того, зачем вообще делать паузу. Если пауза между репликами нужна только в нескольких местах, можно вбить их прямо в диалог:
Код
label start:
    window show # это нужно, чтобы во время пауз окно диалога не исчезало
    "Добро пожаловать в общество задумчивых героев!"
    pause 2.0
    "Мы задумываемся на две секунды перед тем, как ответить."
    pause 2.0
    "Если во время этой паузы юзер кликнет еще раз, то пауза закончится, и начнется следующая строка диалога."

Если пауза нужна везде, вообще везде, перед каждой репликой, можно переопределить оператор say. (Можно было бы попытаться добавить callback-функцию для каждого героя, но я не вижу обходного пути добавления туда команды паузы, чтобы не вылетало с ошибкой interaction inside an interaction.)

Кратко, код для переопределения оператора say:

Это кладете в файл 00saycds.rpy (например, имя не особо важно, важно, чтобы он был в списке выше, чем файлы с диалогами):
Код
python early:
    def parse_pausedsay(lex):
        who = lex.simple_expression()
        what = lex.rest()
        what = what[1:-1]
        return (who, what)

    def execute_pausedsay(o):
        who, what = o
        renpy.pause(2.0)
        renpy.say(eval(who), what)

    def lint_pausedsay(o):
        who, what = o
        try:
            eval(who)
        except:
            renpy.error("Character not defined: %s" % who)

        tte = renpy.check_text_tags(what)
        if tte:
            renpy.error(tte)

    renpy.register_statement("", parse=parse_pausedsay, execute=execute_pausedsay, lint=lint_pausedsay)

Использовать как обычно:
Код
label start:
    window show # это нужно, чтобы во время пауз окно диалога не исчезало
    char "Добро пожаловать в общество задумчивых героев!"
    char "Мы задумываемся на две секунды перед тем, как ответить."
    char "Если во время этой паузы юзер кликнет еще раз, то пауза закончится, и начнется следующая строка диалога."

Runf

#403
Круто, спасибо!
Только после "show screen my_map" пришлось дописать "$renpy.pause()", чтобы скрыть диалоговое окно на следующем лейбле.
А пауза нужна в нескольких местах. К сожалению нажатие пробела полностью сбивает паузу и следующая реплика выводится сразу. Можно этого как-то избежать, чтобы пауза точно была? Оно совершенно не принципиально, если вопрос сложный, но все-таки.
Сообщение отредактировал Runf - Понедельник, 04/Сен/2017, 17:33

Runf

#405
Круто, работает!
Тогда еще вопрос, что вы могли бы рекомендовать для изучения ренпай и питона? Уроков находил много, в том числе и тут, но они все новичковые. А посложней что-то?
Сообщение отредактировал Runf - Понедельник, 04/Сен/2017, 19:42
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ)
Поиск: