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

Помощь по Ren'Py (Вопрос\Ответ)

Admin

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

СОНЦЕ

#1216
Noobius,
думаю проще всего так:

Код

    while True:
        menu:
            "Ответить":
                jump answer
            "Ответить культурно" if culture >2:
                jump answer_cultural
            "{color='#666'}Ответить культурно{/color}(не хватает культуры)" if culture <=2:
                pass
            
Сообщение отредактировал СОНЦЕ - Четверг, 05/Авг/2021, 08:56

Katruna

#1217
Noobius, я правильно поняла, что второй вариант ответа присутствует только если значение переменной больше 2? 

Если так, то лично я делала такой финт ушами и все прекрасно работало у меня:

Код

  if blue == 2: 
    
        menu:
            "Позади меня все продолжали раздаваться ругательства из неизвестного мне места. "
            "{color=#000000}Потроллить призрака.{/color}":
                jump good_blue
            
            "{color=#000000}Поругаться с призраком.{/color}":
                jump bad_blue            
   
    elif blue != 2:
        menu:
            "Позади меня все продолжали раздаваться ругательства из неизвестного мне места. "
            "{color=#000000}Поругаться с призраком.{/color}":
                jump bad_blue
 

Но у меня при втором варианте просто нет возможности другого выбора. 
т.е. можно сделать кнопку, но она все равно будет вести к какому-то результату. А тебе, как я поняла, нужно что бы она была, но возможность выбрать ее - не было. Увы, но я не знаю, как сделать такую фичу..
может кто-то еще подскажет тебе..
Художник в душе и в жизни
Дракон в душе и в жизни
Butterfly effect

Noobius

#1219
СОНЦЕ, спасибо, работает!

А кто-нибудь подскажет, как сделать анимацию частью содержимого в метке?

Например, 

Код
#Новая метка:  
label metka:

       show kartinka
       vasiatko "Реплика Васятки"
       hide kartinka

       image animation:
              animation_a with Dissolve (0.08)
           pause 0.15
              animation_b with Dissolve (0.08)
              pause 0.15
              repeat

       show kartinka_b
       vasiatko "Другая реплика Васятки"
       hide kartinka_b

       return


И анимации не выводятся - вместо них сразу выводится kartinka_b.

А если сделать image animation с начала строки, как метку, то она выводится. Но тогда непонятно, как переходить между метками и анимациями.

Aleks-sempai

#1220

Код
image kartinka:
    "kartinka1"
    pause 0.1
    "kartinka2"
    pause 0.1

label start:

    "..."
    scene kartinka #или show kartinka, если это не фон, а спрайт
    "..."
    return
Noobius, вы это имели ввиду?
Сообщение отредактировал Aleks-sempai - Пятница, 06/Авг/2021, 15:09

Noobius

#1221
Цитата Aleks-sempai ()
Noobius, вы это имели ввиду?Мне нравится!0

Получилось, спасибо большое. Самое смешное, что я пытался прописать этот же код 2 раза и подумал, что иду не тем путем. Но раз знающий человек сказал, что путь верный - попробовал в 3-й раз, и получилось. Возможно, в первые 2 раза не получалось, потому что я писал "show kartinka", но не закрывал ее (hide) - подумал, что для анимации это не нужно. Оказалось, что нужно.

TestGameHentai

#1222
Доброго времени суток! У меня тут возникла проблема. Некорректно работает кнопка "Подтвердить" в окне ввода имени персонажа при пустом поле. По сути просто напросто не видит переменную.

Цитата
I'm sorry, but an uncaught exception occurred.
While running game code:
  File "game/script.rpy", line 13, in script
    if cpl == "":
  File "game/script.rpy", line 13, in <module>
    if cpl == "":
NameError: name 'cpl' is not defined

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "game/script.rpy", line 13, in script
    if cpl == "":
  File "renpy/ast.py", line 1852, in execute
    if renpy.python.py_eval(condition):
  File "renpy/python.py", line 2249, in py_eval
    return py_eval_bytecode(code, globals, locals)
  File "renpy/python.py", line 2242, in py_eval_bytecode
    return eval(bytecode, globals, locals)
  File "game/script.rpy", line 13, in <module>
    if cpl == "":
NameError: name 'cpl' is not defined

Windows-7-6.1.7601-SP1
Ren'Py 7.4.5.1648
Memories 1.0
Fri Aug  6 22:44:25 2021

Если следовать далее через ENTER, всё спокойно читает, корректно работает. И с пустым полем, и с набранным. Если после прохода через ENTER всплывает вновь окно ввода имени персонажа, то кнопка "Подтвердить" после ввода имени будет выдавать не ошибку, а перейдёт вновь обратно на окно ввода.

Собственно, сам код:

Переменная в файле characters:
Код
define player = Character("[cpl]", color="#ffffff")

Запрос имени в файле script:
Код
label namepl:        "Как же меня зовут?"
        $ cpl = renpy.input("Назовите себя:", screen="charname", length=24, exclude="'\{\}\[\]@.,<>\"\|/№#$;%^:&?*()_=+1234567890`~").strip()
   Пробовал размещать дефайн персонажа и запрос имени в один файл - безрезультатно.

Окно:
Код
screen charname(prompt):    modal True
    frame:
        background Frame("#000000")
        align (0.5,0.5)
        xsize 600 ysize 350
        vbox:
            xfill True
            yfill True
            text prompt xalign 0.5
            input id "input" xalign 0.5
            hbox:
                xalign 0.5
                textbutton("Подтвердить"):
                    action Jump ("test")

Система "Анти-дебил", не позволяющая игроку пройти с пустым полем:
Код
label test:        "..."
        if cpl == "":
            "\[Требуется ввести имя\]"
            jump namepl
        else:
            "Точно."
            jump next

Продолжение игры при наличии имени:
   
Код
label next:        player "Меня зовут [cpl]."

P.s. У меня нет желания устанавливать "имя по умолчанию", дабы не конкретизировать персонажа.

lf2mr

#1223
Есть функция меняющая какие-то параметры, например:

Код
def myfunc():
    globals()['x'] = "Значение"
    return
Куда я могу вставить эту функцию, чтобы  она срабатывала например только при заходе на страницу настроек? Если вставляю это в screens.rpy, в блок screen preferences(), или ещё куда там, то срабатывает она постоянно и везде, а не только при переходе на этот screen.

СОНЦЕ

#1224
TestGameHentai

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

Код
default cpl = ''
define player = Character("[cpl]", color="#ffffff")

init python:
    input_name = VariableInputValue('cpl',returnable = True)

screen charname(prompt):
    modal True
    frame:
        background Frame("#000000")
        align (0.5,0.5)
        xsize 600 ysize 350
        vbox:
            xfill True
            yfill True
            text prompt xalign 0.5
            input id "input" value input_name xalign 0.5
            hbox:
                xalign 0.5
                textbutton("Подтвердить"):
                    action Return(cpl)

label start:

label namepl:    
    "Как же меня зовут?"
    $ cpl = renpy.input("Назовите себя:", screen="charname", length=24, exclude="'\{\}\[\]@.,<>\"\|/№#$;%^:&?*()_=+1234567890`~").strip()
    #$ cpl = _return
    jump test
    return

label test:
    "..."
    if cpl == "":
        "\[Требуется ввести имя\]"
        jump namepl
    else:
        "Точно."
        jump next
        
label next:   
    player "Меня зовут [cpl]."
    return



lf2mr

тут я честно говоря плаваю, и вероятно есть более правильное решение, например через команду on
но там в интерфейсе по умолчанию все сложно, потому я обычно костылирую через timer

Код

screen myscreen:
    timer .01 action Function(myfunc)


Но возможно следует вообще пересмотреть логику функции и сделать ее более благоприятной для движка, тоесть чтобы оно не делало что-то гловально вне языка скринов
цитирую:
Цитата

Screens must not cause side effects that are visible from outside the screen. Ren'Py will run a screen multiple times, as it deems necessary. It runs a screen as part of the image prediction process, before the screen is first shown. As a result, if running a screen has side effects, those side effects may occur at unpredictable times.

Using Python generators in screens may cause unpredictable results. This traces back to an issue with the way the Python interpreter compiles Python source code that will be used in a screen context. Generators can be used in Python functions called from a screen, but not in the screen itself.

pirsus

#1225
Ребята, подскажите.

Надо вывести на экран текст одновременно в нескольких местах.


Код
show text "{size=50}[money]":
        xpos 1340
        ypos 175

Одиночная команда работает.

Но если я пытаюсь разместить несколько команд, то уже нет


Код
show text "{size=50}[money]":
        xpos 1340
        ypos 175
show text "{size=50}[gold]":
        xpos 1340
        ypos 225
Тут выводиться только первая часть.

Код

  show text "{size=50}[money]":
        xpos 1340
        ypos 175
pause 0.1
show text "{size=50}[gold]":
        xpos 1340
        ypos 225
А здесь только вторая.

А как прописать, чтобы отображались оба числа одновременно?

СОНЦЕ

#1226
pirsus,

Код

  show expression Text("{size=50}[money]"):
        xpos 1340
        ypos 175
    show expression Text("{size=50}[gold]"):
        xpos 1340
        ypos 225
Сообщение отредактировал СОНЦЕ - Вторник, 10/Авг/2021, 12:01

FreQl

#1227
Хочу подправить косячки мелкие в новелле, в которой есть 2 языка (английский и русский), но когда исправляю косяк в основном скрипте (который на русском), то когда перехожу на английский перевод, то там уже та исправленная строка на русском. Пытался в файле с англ переводом, в строке old изменить, но тоже безрезультатно...
Есть ли способ подправить косяк в обеих переводах, но при этом не ломать ничего?)

dmit

#1228
FreQl, если снова нажать "создать перевод", то изменённые строки просто допишутся в конец файла. Старые не удаляются, их можно удалить в ручную самостоятельно (или заменить на новые для эстетического удовольствия).
планета FOREVER!!!      Unkenbro team

pirsus

#1230
Цитата СОНЦЕ ()
Код  show expression Text("{size=50}[money]"):
        xpos 1340
        ypos 175
    show expression Text("{size=50}[gold]"):
        xpos 1340
        ypos 225
Всё работает!
Спасибо!
Поиск: