Перейти к содержанию
АнимеФорум

Рекомендуемые сообщения

Опубликовано
Подскажите как реализовать ввод данных? Например я хочу, что бы игрок сам ввел свое имя и по ходу прохождения новеллы, сам писал ответы на заданные вопросы. Возможно ли такое реализовать на Ren'Py?
  • Ответов 1 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

  • 1 месяц спустя...
Опубликовано

Снова здравствуйте:

Возник вопрос: я сделал квик тайм эвенты с нажимаемой кнопкой и таймером по подсказанной мне ссылочке http://lemmasoft.ren....php?f=8&t=7691

Но возникла проблемка: никак генератор случайных чисел не удаётся прилепить к этой функции.

Из всех пунктов работает только последний - не пойму почему.

Ведь сделал по аналогии с работающем скриптом.

post-251471-0-41744000-1404318569_thumb.jpg

 

Что у меня в скрипте не так?

Опубликовано

Генератор работает как и положено - можете проверить

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(("ф", "й", "ц", "я", "ы")))

Опубликовано

Генератор работает как и положено - можете проверить.

 

Все дело в экране "timeout_event". Экраны объявляются до того как начнет работать сам скрипт (даже если объявления экранов размещены в середине скрипта, они будут выполнены до начала исполнения метки start). В вашем примере экран "timeout_event" объявлен дважды и, таким образом, в игре используется последний вариант.

Решить проблему можно двумя способами:

1 - изменить название одного из экранов

2 - сделать один экран, но вместо конкретного указания кнопки, которую надо будет нажать, использовать переменную, и при вызове данного экрана указывать значение этой переменной (кстати вместо названия метки для действия Jump также можно использовать переменную). Как-то так.

 

Спасибо работает!

  • 2 недели спустя...
Опубликовано

Подскажите, пожалуйста:

Мне нужно получить нестандартный формат экрана. Т.е. не как по умолчанию, когда текст располагается горизонтально внизу экрана, а чтобы текст располагался слева (или справа) в вертикальном поле, занимающем приблизительно 1\4 экрана по горизонтали. Можно ли это сделать в Ren Py?

Опубликовано

Сделать можно, для этого надо отредактировать "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.3F

http://www.renpy.org...properties.html

http://www.renpy.org...tml/config.html

  • 2 недели спустя...
Опубликовано (изменено)

Подскажите пожалуйста, как правильно работать с постоянной persistent - а то все никак не получается.

 

Ситуация, хочу использовать реплеи определённых моментов игры, но никак не получается сделать их меню открываемым (либо сразу открыто, либо ошибка), что я делаю не так?

 

P.S. Можно и не меню - а просто запуск с определенного места игры - метод с галереей показанный тут (смотреть ссылку), не подошёл.

http://www.renpy.org...kalnaja_komnata

 

Ибо кроме как для показа картинок не годится (не знаю как вместо картинки сделать переход в определённое место игры).

post-251471-0-20819100-1406043390_thumb.png

Изменено пользователем Int01 (смотреть историю редактирования)
Опубликовано

Значения устойчивых переменных (persistent data) сохраняются даже при перезапуске игры, поэтому, если разблокировка вашего меню зависит от значения такой переменной, и однажды вы установили это значение, то меню будет разблокировано всегда. Точнее, до того момента, пока вы не измените значение устойчивой переменной на какое-нибудь другое или не сотрете все значения устойчивых переменных (кнопка в модуле запуска "delete persistent").

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

Т.к. устойчивые переменные используются именно для того, чтобы при каждом перезапуске игры их значения не изменялись на значения по умолчанию, первоначальные значения для них надо устанавливать так

init:
   if not persistent.my_variable:
       $ persistent.my_variable = False

(если значение устойчивой переменной persistent.my_variable отсутствует, то установим ее значение False; при следующем запуске игры у persistent.my_variable уже будет значение, условие не выполнится, и значение не будет изменено)

Опубликовано

Значения устойчивых переменных (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

 

post-251471-0-43011600-1406551287_thumb.png

Опубликовано
та статься в этом не помощник

Логично - это ведь галерея картинок...

Просто сделайте экран с несколькими кнопками, а в качестве действия поставьте на них Replay("название_нужной_метки")

(сам делать не пробовал, так что...)

 

http://www.renpy.org...oms.html#replay

Опубликовано (изменено)

Логично - это ведь галерея картинок...

Просто сделайте экран с несколькими кнопками, а в качестве действия поставьте на них Replay("название_нужной_метки")

(сам делать не пробовал, так что...)

 

http://www.renpy.org...oms.html#replay

Во спасибо, помогло!

 

Это же та же статься, что я на Русском читал - блин не перевели 3 раздел:(

Изменено пользователем Int01 (смотреть историю редактирования)
  • 3 недели спустя...
Опубликовано

Вам надо сделать метку splashscreen, в ней написать код для показа картинок и в конце метки не забыть про команду return - должно получиться.

 

http://www.renpy.org...#special-labels

http://www.renpy.org..._a_Splashscreen

  • 3 недели спустя...
Опубликовано

Добрый день, такой дело:

Если вводить в код реплику как "Текст реплики", то текст, без имени персонажа будет выводиться под верхней границей текстового окна, а если в вводить реплику как s "Текст реплики"(s - короткое имя персонажа), то под верхней границей будет находиться имя персонажа, а на след. строчке. Так вот, как сделать так, чтобы текст реплики всегда выводился, грубо говоря, на второй строке текстового окна, независимо от того, имеется ли имя персонажа или нет. Заранее спасибо, надеюсь внятно объяснил)

Опубликовано

Вы можете сделать для этих целей персонажа с именем " " (пробел) - видно его не будет, но строчку занять должен. Или даже добавить такое имя персонажу narrator (этот персонаж используется в случае, когда вы просто пишете строку с текстом не указывая, какого-либо персонажа).

define e = Character ("Eileen")
define s = Character(" ")
define narrator = Character(" ")

label start:
   e "Привет!"
   s "И тебе привет!"
   "?"

  • 2 недели спустя...
Опубликовано

Привет! Есть ряд вопросов:

 

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)

 

Но этот код не работает.

Опубликовано

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

http://www.renpy.org...ml#data-actions

 

2. Можно, только синтаксис немного другой, и вместо call лучше использовать show, т.к. в первом случае игра не продвинется дальше, пока экран не вернет какое-либо значение, а когда вы скроете экран он уже точно больше ничего не вернет. Если же надо заставить игрока повзаимодействовать с экраном до тех пор, пока он не нажмет кнопку "самоуничтожение", то можете установить этому экрану значение параметра modal - True

http://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

Опубликовано

Спасибо за ответ!

 

Про 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".

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

Опубликовано
На сколько я знаю, вызвать несколько экземпляров одного экрана нельзя. Можете сделать несколько одинаковых экранов с разными названиями и вызвать их с разными значениями переменных (сделать придется столько экранов, сколько их одновременно должно быть на экране). Если их предполагаемое количество десятки-сотни, то попробуйте создать их автоматически - http://www.renpy.org/doc/html/screen_python.html
Опубликовано

Столкнулся с каким-то для меня прямо-таки необъяснимым явлением.

 

Вот есть скрин:

 

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_transform

KeyError: 'j'

 

само j.mpcost в этом же блоке отлично работает, хотя бы здесь:

 

if not j.mpcost > player.mp:

 

Я понимаю, что, возможно, для ловли бага надо смотреть весь код, что, конечно, никому не надо. :) Если так, то

я вполне обойдусь без объяснения этой проблемы. Или позже сам пойму в чем дело, или просто забью. Обойти, в конце

концов, это совсем не сложно.

 

Но вдруг это что-то совершенно очевидное, что ясно даже из этого блока кода, чего я просто в силу малоопытности не

понимаю? Тогда было бы здорово понять, в чем дело.

Опубликовано (изменено)

На сколько я знаю, вызвать несколько экземпляров одного экрана нельзя. [/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/ , приглашаю там запостить и твою.

Изменено пользователем Элионт (смотреть историю редактирования)
Опубликовано

Можно, и ещё как. Для этого служит директива use, позволяющая вызывать скрин как функцию.

http://www.renpy.org/doc/html/screens.html#use

О, отлично! Очень полезная штука.

 

попробуй использовать стандартное форматирование питона, а не ренпи. Последнее глючит через раз.

И правда. Вот уж действительно, хочешь двиг без глюков — напиши его сам. :lol: С форматированием питона всё работает. Полез это самое форматирование изучать.)

 

Спасибо за помощь. :)

 

Кстати, что разрабатываешь? Мою можно посмотреть тут - http://4otaku.org/blog/gamedev/ , приглашаю там запостить и твою.

Да я пока больше тренируюсь на кошках, вот как навык наберу — тогда можно будет уже что-то постить. Спасибо за приглашение, обязательно

посмотрю, что там.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...

Важная информация