liaman Опубликовано 24 мая, 2014 Жалоба Опубликовано 24 мая, 2014 Подскажите как реализовать ввод данных? Например я хочу, что бы игрок сам ввел свое имя и по ходу прохождения новеллы, сам писал ответы на заданные вопросы. Возможно ли такое реализовать на Ren'Py? Цитата
Алекс__ Опубликовано 24 мая, 2014 Жалоба Опубликовано 24 мая, 2014 Вам поможет renpy.inputПара примеров:http://www.renpy.org...tml#renpy.inputhttp://lemmasoft.ren...lit=sex#p163687 Цитата
Int01 Опубликовано 2 июля, 2014 Жалоба Опубликовано 2 июля, 2014 Снова здравствуйте:Возник вопрос: я сделал квик тайм эвенты с нажимаемой кнопкой и таймером по подсказанной мне ссылочке http://lemmasoft.ren....php?f=8&t=7691Но возникла проблемка: никак генератор случайных чисел не удаётся прилепить к этой функции.Из всех пунктов работает только последний - не пойму почему.Ведь сделал по аналогии с работающем скриптом. Что у меня в скрипте не так? Цитата
Алекс__ Опубликовано 2 июля, 2014 Жалоба Опубликовано 2 июля, 2014 Генератор работает как и положено - можете проверить label start: $ var = renpy.random.randint (1,2) "[var]" jump start Все дело в экране "timeout_event". Экраны объявляются до того как начнет работать сам скрипт (даже если объявления экранов размещены в середине скрипта, они будут выполнены до начала исполнения метки start). В вашем примере экран "timeout_event" объявлен дважды и, таким образом, в игре используется последний вариант.Решить проблему можно двумя способами:1 - изменить название одного из экранов2 - сделать один экран, но вместо конкретного указания кнопки, которую надо будет нажать, использовать переменную, и при вызове данного экрана указывать значение этой переменной (кстати вместо названия метки для действия Jump также можно использовать переменную). Как-то так screen t_scr: key var_x action [Hide("t_scr"), Jump("win")] text "Нажмите [var_x]" align (0.5, 0.5) label win: "!" jump start # The game starts here. label start: call screen t_scr(var_x=renpy.random.choice(("ф", "й", "ц", "я", "ы"))) Цитата
Int01 Опубликовано 2 июля, 2014 Жалоба Опубликовано 2 июля, 2014 Генератор работает как и положено - можете проверить. Все дело в экране "timeout_event". Экраны объявляются до того как начнет работать сам скрипт (даже если объявления экранов размещены в середине скрипта, они будут выполнены до начала исполнения метки start). В вашем примере экран "timeout_event" объявлен дважды и, таким образом, в игре используется последний вариант.Решить проблему можно двумя способами:1 - изменить название одного из экранов2 - сделать один экран, но вместо конкретного указания кнопки, которую надо будет нажать, использовать переменную, и при вызове данного экрана указывать значение этой переменной (кстати вместо названия метки для действия Jump также можно использовать переменную). Как-то так. Спасибо работает! Цитата
vikvikvik Опубликовано 12 июля, 2014 Жалоба Опубликовано 12 июля, 2014 Подскажите, пожалуйста:Мне нужно получить нестандартный формат экрана. Т.е. не как по умолчанию, когда текст располагается горизонтально внизу экрана, а чтобы текст располагался слева (или справа) в вертикальном поле, занимающем приблизительно 1\4 экрана по горизонтали. Можно ли это сделать в Ren Py? Цитата
Алекс__ Опубликовано 12 июля, 2014 Жалоба Опубликовано 12 июля, 2014 Сделать можно, для этого надо отредактировать "screen say". Если вид текстового окна во время всей игры будет одинаковым, то можно настроить стили или прямо вписать параметры в код экрана "say".Если есть необходимость использовать разные виды текстового окна (стандартное, слева, справа), то нужно добавить соответствующие параметры в код экрана "say", но их значения сделать переменными, и при объявлении различных персонажей задать значения этих переменных (тогда у разных персонажей будут разные текстовые окна).Например: ############################################################################## # Say # # Screen that's used to display adv-mode dialogue. # http://www.renpy.org/doc/html/screen_special.html#say screen say: # Defaults for side_image and two_window default side_image = None default two_window = False default box_yfill = False # укажем значения по умолчании для наших переменных (тогда не придется их указывать абсолютно для всех персонажей в игре) - не растягивать окно на весь экран по вертикали default box_yalign = 1.0 # положение окна внизу экрана # Decide if we want to use the one-window or two-window variant. if not two_window: # The one window variant. window: id "window" yalign box_yalign # положение окна по вертикали yfill box_yfill # растягивание окна по вертикали на весь экран has vbox: style "say_vbox" if who: text who id "who" text what id "what"(если хотите показывать имя персонажа в отдельном окне, то по аналогии надо будет изменить и вторую часть кода экрана "say") # Declare characters used by this game. define e = Character('Eileen', color="#c8ffc8", show_box_yfill=True, show_box_yalign=0.0, window_right_margin=config.screen_width*3/4) # укажем необходимые значения наших переменных (перед названием переменной необходимо добавить show_ ) # The game starts here. label start: "Test" e "Hello, world!" "?"http://www.renpy.org...n_they_speak.3Fhttp://www.renpy.org...properties.htmlhttp://www.renpy.org...tml/config.html Цитата
Int01 Опубликовано 22 июля, 2014 Жалоба Опубликовано 22 июля, 2014 (изменено) Подскажите пожалуйста, как правильно работать с постоянной persistent - а то все никак не получается. Ситуация, хочу использовать реплеи определённых моментов игры, но никак не получается сделать их меню открываемым (либо сразу открыто, либо ошибка), что я делаю не так? P.S. Можно и не меню - а просто запуск с определенного места игры - метод с галереей показанный тут (смотреть ссылку), не подошёл.http://www.renpy.org...kalnaja_komnata Ибо кроме как для показа картинок не годится (не знаю как вместо картинки сделать переход в определённое место игры). Изменено 22 июля, 2014 пользователем Int01 (смотреть историю редактирования) Цитата
Алекс__ Опубликовано 22 июля, 2014 Жалоба Опубликовано 22 июля, 2014 Значения устойчивых переменных (persistent data) сохраняются даже при перезапуске игры, поэтому, если разблокировка вашего меню зависит от значения такой переменной, и однажды вы установили это значение, то меню будет разблокировано всегда. Точнее, до того момента, пока вы не измените значение устойчивой переменной на какое-нибудь другое или не сотрете все значения устойчивых переменных (кнопка в модуле запуска "delete persistent").Ошибка в самом начале может быть связана с тем, что значение устойчивой переменной не было задано.Т.к. устойчивые переменные используются именно для того, чтобы при каждом перезапуске игры их значения не изменялись на значения по умолчанию, первоначальные значения для них надо устанавливать так init: if not persistent.my_variable: $ persistent.my_variable = False(если значение устойчивой переменной persistent.my_variable отсутствует, то установим ее значение False; при следующем запуске игры у persistent.my_variable уже будет значение, условие не выполнится, и значение не будет изменено) Цитата
Int01 Опубликовано 28 июля, 2014 Жалоба Опубликовано 28 июля, 2014 Значения устойчивых переменных (persistent data) сохраняются даже при перезапуске игры, поэтому, если разблокировка вашего меню зависит от значения такой переменной, и однажды вы установили это значение, то меню будет разблокировано всегда. Точнее, до того момента, пока вы не измените значение устойчивой переменной на какое-нибудь другое или не сотрете все значения устойчивых переменных (кнопка в модуле запуска "delete persistent").Ошибка в самом начале может быть связана с тем, что значение устойчивой переменной не было задано.Т.к. устойчивые переменные используются именно для того, чтобы при каждом перезапуске игры их значения не изменялись на значения по умолчанию, первоначальные значения для них надо устанавливать так init: if not persistent.my_variable: $ persistent.my_variable = False(если значение устойчивой переменной persistent.my_variable отсутствует, то установим ее значение False; при следующем запуске игры у persistent.my_variable уже будет значение, условие не выполнится, и значение не будет изменено)Спасибо, это работает.А как прикрутить реплеи к разблокирующимся превьюшкам (картинкам), та статься в этом не помощник, там только картинки могут отображаться, а не моменты из игры. http://www.renpy.org...kalnaja_komnata Цитата
Алекс__ Опубликовано 28 июля, 2014 Жалоба Опубликовано 28 июля, 2014 та статься в этом не помощникЛогично - это ведь галерея картинок...Просто сделайте экран с несколькими кнопками, а в качестве действия поставьте на них Replay("название_нужной_метки")(сам делать не пробовал, так что...) http://www.renpy.org...oms.html#replay Цитата
Int01 Опубликовано 28 июля, 2014 Жалоба Опубликовано 28 июля, 2014 (изменено) Логично - это ведь галерея картинок...Просто сделайте экран с несколькими кнопками, а в качестве действия поставьте на них Replay("название_нужной_метки")(сам делать не пробовал, так что...) http://www.renpy.org...oms.html#replayВо спасибо, помогло! Это же та же статься, что я на Русском читал - блин не перевели 3 раздел:( Изменено 28 июля, 2014 пользователем Int01 (смотреть историю редактирования) Цитата
Алекс__ Опубликовано 28 июля, 2014 Жалоба Опубликовано 28 июля, 2014 Дык, функция реплея появилась позже перевода статьи... Цитата
Яритэ Мегури Опубликовано 18 августа, 2014 Жалоба Опубликовано 18 августа, 2014 Как показать пару картинок после запуска игры, до появления главного меню? Цитата
Алекс__ Опубликовано 19 августа, 2014 Жалоба Опубликовано 19 августа, 2014 Вам надо сделать метку splashscreen, в ней написать код для показа картинок и в конце метки не забыть про команду return - должно получиться. http://www.renpy.org...#special-labelshttp://www.renpy.org..._a_Splashscreen Цитата
UnkleForman Опубликовано 4 сентября, 2014 Жалоба Опубликовано 4 сентября, 2014 Добрый день, такой дело:Если вводить в код реплику как "Текст реплики", то текст, без имени персонажа будет выводиться под верхней границей текстового окна, а если в вводить реплику как s "Текст реплики"(s - короткое имя персонажа), то под верхней границей будет находиться имя персонажа, а на след. строчке. Так вот, как сделать так, чтобы текст реплики всегда выводился, грубо говоря, на второй строке текстового окна, независимо от того, имеется ли имя персонажа или нет. Заранее спасибо, надеюсь внятно объяснил) Цитата
Алекс__ Опубликовано 5 сентября, 2014 Жалоба Опубликовано 5 сентября, 2014 Вы можете сделать для этих целей персонажа с именем " " (пробел) - видно его не будет, но строчку занять должен. Или даже добавить такое имя персонажу narrator (этот персонаж используется в случае, когда вы просто пишете строку с текстом не указывая, какого-либо персонажа). define e = Character ("Eileen") define s = Character(" ") define narrator = Character(" ") label start: e "Привет!" s "И тебе привет!" "?" Цитата
Vielstern Опубликовано 16 сентября, 2014 Жалоба Опубликовано 16 сентября, 2014 Привет! Есть ряд вопросов: 1. Как можно (и можно ли) с помощью Action вызвать определенный label с параметрами? Есть, предположим, некий label1: label label1(variable1): $variable1 +=1 return а) Как через стандартный Action Jump перейти к нему с указанием параметра? Если бы параметра не было, товсе просто: textbutton "Тест" action Jump("label1") А с параметром? б) Можно ли как-то сделать не Jump, а Call из кнопки? Т.е. мне надо, чтобы просто выполнился label1, но при этомкод продолжался как после Call. 2. Можно ли передавать в качестве параметров названия, к примеру, скринов? Что-то в таком духе: screen test1(scr): textbutton "самоуничтожение" action Hide(scr) и далее: call screen test1(test1) Но этот код не работает. Цитата
Алекс__ Опубликовано 16 сентября, 2014 Жалоба Опубликовано 16 сентября, 2014 1. Если при нажатии на кнопку необходимо изменить значение переменной, то для этого есть действие SetVariablehttp://www.renpy.org...ml#data-actions 2. Можно, только синтаксис немного другой, и вместо call лучше использовать show, т.к. в первом случае игра не продвинется дальше, пока экран не вернет какое-либо значение, а когда вы скроете экран он уже точно больше ничего не вернет. Если же надо заставить игрока повзаимодействовать с экраном до тех пор, пока он не нажмет кнопку "самоуничтожение", то можете установить этому экрану значение параметра modal - Truehttp://www.renpy.org...creen-statement screen scr_1: vbox: align (0.5, 0.0) text "[var]" textbutton "Тест" action SetVariable("var", var+1) screen test1: modal False textbutton "самоуничтожение" action Hide(scr) # The game starts here. label start: $ var = 0 show screen scr_1 e "You've created a new Ren'Py game." show screen test1(scr="test1") e "Once you add a story, pictures, and music, you can release it to the world!" "..." "?" jump start Цитата
Vielstern Опубликовано 17 сентября, 2014 Жалоба Опубликовано 17 сентября, 2014 Спасибо за ответ! Про SetVariable я был в курсе, не очень удачный пример подобрал, пожалуй. Там смысл был не в том, что в лабеле делается, а именно в вызове этого лабела через Call или его аналог. Еще раз перечитав все, что можно на эту тему, делаю вывод, что из Actionвсе же только Jump доступен. И, судя по всему, параметры через этот Jump тоже передать нельзя (или все-таки как-то можно?) По второму моменту — оказалось, что мой код тоже сработал бы, просто надо было проставить кавычки для параметра.Т.е. неcall screen test1(test1),аcall screen test1("test1") Про разницу между Call и Show знал, а вот про modal нет — очень полезно, спасибо. Тогда еще один вопрос — можно ли как-то вызвать несколько экземпляров, к примеру, одного скрина одновременно? Если сделать так:Show screen test1("screen1") Show screen test1("screen2"), то сначала скрин test1 вызовется с параметром "screen1" и тут же следом он же с параметром "screen2".А можно ли вызвать его экземпляры одновременно с этими параметрами, чтобы они вместе отображались на экране? Цитата
Алекс__ Опубликовано 18 сентября, 2014 Жалоба Опубликовано 18 сентября, 2014 На сколько я знаю, вызвать несколько экземпляров одного экрана нельзя. Можете сделать несколько одинаковых экранов с разными названиями и вызвать их с разными значениями переменных (сделать придется столько экранов, сколько их одновременно должно быть на экране). Если их предполагаемое количество десятки-сотни, то попробуйте создать их автоматически - http://www.renpy.org/doc/html/screen_python.html Цитата
Vielstern Опубликовано 19 сентября, 2014 Жалоба Опубликовано 19 сентября, 2014 Понятно, спасибо. Цитата
Vielstern Опубликовано 21 сентября, 2014 Жалоба Опубликовано 21 сентября, 2014 Столкнулся с каким-то для меня прямо-таки необъяснимым явлением. Вот есть скрин: screen skills_panel(player): vbox: for j in player.skills: if not j.mpcost > player.mp: textbutton "[j.name]" hovered Notify(j.description) action If(select_hero == 0, Notify("Выбери цель!"), Return(j)) else: textbutton "[j.name]" hovered Notify("Не хватает энергии!") action Notify("На этот прием не хватает энергии") оно замечательно работает, но вот если поменять последнюю строчку следующим образом: else: textbutton "[j.name]" hovered Notify("Не хватает энергии!") action Notify("На этот прием не хватает [j.mpcost] энергии") то получаем при активации этой строки вот такую вот штуку: I'm sorry, but an uncaught exception occurred. While running game code: File "game/true_battle.rpy", line 138, in script call python: File "game/true_battle.rpy", line 168, in script call screen command_screen(attacker) File "renpy/common/000statements.rpy", line 457, in execute_call_screen store._return = renpy.call_screen(name, *args, **kwargs) File "renpy/common/00action_other.rpy", line 417, in execute screen notify: File "renpy/common/00action_other.rpy", line 420, in execute text message at _notify_transformKeyError: 'j' само j.mpcost в этом же блоке отлично работает, хотя бы здесь: if not j.mpcost > player.mp: Я понимаю, что, возможно, для ловли бага надо смотреть весь код, что, конечно, никому не надо. :) Если так, тоя вполне обойдусь без объяснения этой проблемы. Или позже сам пойму в чем дело, или просто забью. Обойти, в концеконцов, это совсем не сложно. Но вдруг это что-то совершенно очевидное, что ясно даже из этого блока кода, чего я просто в силу малоопытности непонимаю? Тогда было бы здорово понять, в чем дело. Цитата
Элионт Опубликовано 22 сентября, 2014 Жалоба Опубликовано 22 сентября, 2014 (изменено) На сколько я знаю, вызвать несколько экземпляров одного экрана нельзя. [/url]Алекс, не дезинформируй народ ))Можно, и ещё как. Для этого служит директива use, позволяющая вызывать скрин как функцию.http://www.renpy.org/doc/html/screens.html#use Vielstern, попробуй использовать стандартное форматирование питона, а не ренпи. Последнее глючит через раз.то есть последняя строчка должна выглядеть так: textbutton ("%s"%j.name) hovered Notify("Не хватает энергии!") action Notify("На этот прием не хватает %d энергии"%j.mpcost) Кстати, что разрабатываешь? Мою можно посмотреть тут - http://4otaku.org/blog/gamedev/ , приглашаю там запостить и твою. Изменено 22 сентября, 2014 пользователем Элионт (смотреть историю редактирования) 1 Цитата
Vielstern Опубликовано 22 сентября, 2014 Жалоба Опубликовано 22 сентября, 2014 Можно, и ещё как. Для этого служит директива use, позволяющая вызывать скрин как функцию.http://www.renpy.org/doc/html/screens.html#useО, отлично! Очень полезная штука. попробуй использовать стандартное форматирование питона, а не ренпи. Последнее глючит через раз.И правда. Вот уж действительно, хочешь двиг без глюков — напиши его сам. :lol: С форматированием питона всё работает. Полез это самое форматирование изучать.) Спасибо за помощь. :) Кстати, что разрабатываешь? Мою можно посмотреть тут - http://4otaku.org/blog/gamedev/ , приглашаю там запостить и твою.Да я пока больше тренируюсь на кошках, вот как навык наберу — тогда можно будет уже что-то постить. Спасибо за приглашение, обязательнопосмотрю, что там. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.