Пользователи · Поиск по форуму · · Вход в аккаунт · Регистрация |
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ) |
Помощь по Ren'Py (Вопрос\Ответ) |
TestGameHentai#1231Доброго времени суток! У меня тут возникла проблема. Некорректно работает кнопка "Подтвердить" в окне ввода имени персонажа при пустом поле. По сути просто напросто не видит переменную.
Цитата 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#1232Есть функция меняющая какие-то параметры, например:
Код def myfunc(): globals()['x'] = "Значение" return |
СОНЦЕ#1233TestGameHentai,
не удалось воспроизвести ошибку, но из кусочков предоставленнного кода кажется получилось сделать чтоб работало. проверь Код 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#1234Ребята, подскажите.
Надо вывести на экран текст одновременно в нескольких местах. Код 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 А как прописать, чтобы отображались оба числа одновременно? |
FreQl#1236Хочу подправить косячки мелкие в новелле, в которой есть 2 языка (английский и русский), но когда исправляю косяк в основном скрипте (который на русском), то когда перехожу на английский перевод, то там уже та исправленная строка на русском. Пытался в файле с англ переводом, в строке old изменить, но тоже безрезультатно...
Есть ли способ подправить косяк в обеих переводах, но при этом не ломать ничего?) |
dmit#1237FreQl, если снова нажать "создать перевод", то изменённые строки просто допишутся в конец файла. Старые не удаляются, их можно удалить в ручную самостоятельно (или заменить на новые для эстетического удовольствия).
планета FOREVER!!! Unkenbro team
|
lf2mr#1240Всем привет.
Вот есть такая строка в renpy: Код text "%s" % outputDay xalign 0.02 yalign 0.97 Код text "%s" % outputDay if a == 1 xalign 0.02 yalign 0.97 else xalign 0.02 yalign 0.97 Само собой представленный код для примера не работает, но может его как-то по-другому надо писать. Заранее спасибо всем откликнувшимся и нет. Сообщение отредактировал lf2mr - Среда, 18/Авг/2021, 19:56
|
dmit#1241lf2mr, если это в экране, то можно:
Код text "%s" % outputDay align If(a==1, (0.0, 1.0), (1.0, 0.0)) Сообщение отредактировал dmit - Среда, 18/Авг/2021, 21:20
планета FOREVER!!! Unkenbro team
|
dmit#1243lf2mr, питон и соответственно ренпи - регистрозависимый язык, if не равно If.
экран это когда в нём Код screen xxx(): text..... а в каком он файле ренпи побоку. планета FOREVER!!! Unkenbro team
|
GrafOff#1244У меня проблема с imagemap
Вроде прописываю код правильно и в первый раз все срабатывает: нужно выбрать персонажа, после чего открывается экран с описанием этого персонажа, а вот дальше косяк. На новом экране, тоже imagemap есть две точки: назад, которая должна весте к предыдущему экрану и запуск, которая начинает новеллу за этого перса, но вместо того, чтобы реагировать на эти команды ренпи тупо запускает все следующие лейблы с остальными персонажами и только пролистав их все начинает новеллу, по факту ни за кого. То есть как я понимаю проблема в том, что прога почему-то выбирает все скрипты по очереди, а не реагирует на команды. Прикрепления:
5526215.png
(146.4 Kb)
|
| |||