Перейти к содержимому

Фотография

Визуальные новеллы своими руками.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1019

#901 liaman

liaman
  • Участники
  • Pip
  • Новичок

  • Cообщений: 1
0
Обычный

Отправлено 24 Май 2014 - 20:19

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

#902 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 25 Май 2014 - 01:57

Вам поможет renpy.input
Пара примеров:
http://www.renpy.org...tml#renpy.input
http://lemmasoft.ren...lit=sex#p163687
  • 0

#903 Int01

Int01
  • Участники
  • PipPip
  • Интересующийся

  • Cообщений: 39
0
Обычный

Отправлено 02 Июль 2014 - 19:30

Снова здравствуйте:
Возник вопрос: я сделал квик тайм эвенты с нажимаемой кнопкой и таймером по подсказанной мне ссылочке http://lemmasoft.ren....php?f=8&t=7691
Но возникла проблемка: никак генератор случайных чисел не удаётся прилепить к этой функции.
Из всех пунктов работает только последний - не пойму почему.
Ведь сделал по аналогии с работающем скриптом.
Прикрепленный файл  02.07.jpg   91,67К   12 скачиваний

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

#904 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 02 Июль 2014 - 21:28

Генератор работает как и положено - можете проверить
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(("ф", "й", "ц", "я", "ы")))

  • 0

#905 Int01

Int01
  • Участники
  • PipPip
  • Интересующийся

  • Cообщений: 39
0
Обычный

Отправлено 02 Июль 2014 - 22:24

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

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

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

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

#906 vikvikvik

vikvikvik
  • Участники
  • Pip
  • Новичок

  • Cообщений: 4
0
Обычный

Отправлено 12 Июль 2014 - 14:00

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

#907 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 12 Июль 2014 - 23:02

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

#908 Int01

Int01
  • Участники
  • PipPip
  • Интересующийся

  • Cообщений: 39
0
Обычный

Отправлено 22 Июль 2014 - 18:37

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

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

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

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

Прикрепленные файлы

  • Прикрепленный файл  22.07.png   16,14К   16 скачиваний

Сообщение отредактировал Int01: 22 Июль 2014 - 18:53

  • 0

#909 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 22 Июль 2014 - 21:24

Значения устойчивых переменных (persistent data) сохраняются даже при перезапуске игры, поэтому, если разблокировка вашего меню зависит от значения такой переменной, и однажды вы установили это значение, то меню будет разблокировано всегда. Точнее, до того момента, пока вы не измените значение устойчивой переменной на какое-нибудь другое или не сотрете все значения устойчивых переменных (кнопка в модуле запуска "delete persistent").
Ошибка в самом начале может быть связана с тем, что значение устойчивой переменной не было задано.
Т.к. устойчивые переменные используются именно для того, чтобы при каждом перезапуске игры их значения не изменялись на значения по умолчанию, первоначальные значения для них надо устанавливать так
init:
    if not persistent.my_variable:
        $ persistent.my_variable = False
(если значение устойчивой переменной persistent.my_variable отсутствует, то установим ее значение False; при следующем запуске игры у persistent.my_variable уже будет значение, условие не выполнится, и значение не будет изменено)

  • 0

#910 Int01

Int01
  • Участники
  • PipPip
  • Интересующийся

  • Cообщений: 39
0
Обычный

Отправлено 28 Июль 2014 - 15:41

Значения устойчивых переменных (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.07.png   118,57К   8 скачиваний
  • 0

#911 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 28 Июль 2014 - 20:31

та статься в этом не помощник

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

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

#912 Int01

Int01
  • Участники
  • PipPip
  • Интересующийся

  • Cообщений: 39
0
Обычный

Отправлено 28 Июль 2014 - 22:06

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

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

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

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

Сообщение отредактировал Int01: 28 Июль 2014 - 22:07

  • 0

#913 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 28 Июль 2014 - 22:15

Дык, функция реплея появилась позже перевода статьи...
  • 0

#914 Яритэ Мегури

Яритэ Мегури
  • Участники
  • Pip
  • Новичок

  • Cообщений: 4
0
Обычный

Отправлено 19 Август 2014 - 01:09

Как показать пару картинок после запуска игры, до появления главного меню?
  • 0

#915 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 19 Август 2014 - 23:51

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

http://www.renpy.org...#special-labels
http://www.renpy.org..._a_Splashscreen
  • 0

#916 UnkleForman

UnkleForman
  • Участники
  • Pip
  • Новичок

  • Cообщений: 1
0
Обычный

Отправлено 04 Сентябрь 2014 - 20:22

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

#917 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 05 Сентябрь 2014 - 17:06

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

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

  • 0

#918 Vielstern

Vielstern
  • Участники
  • Pip
  • Новичок

  • Cообщений: 20
0
Обычный

Отправлено 16 Сентябрь 2014 - 19:00

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

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)

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

#919 Алекс__

Алекс__
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 186
21
Хороший

Отправлено 16 Сентябрь 2014 - 22:03

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

  • 0

#920 Vielstern

Vielstern
  • Участники
  • Pip
  • Новичок

  • Cообщений: 20
0
Обычный

Отправлено 17 Сентябрь 2014 - 10:01

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

Про 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".
А можно ли вызвать его экземпляры одновременно с этими параметрами, чтобы они вместе отображались на экране?
  • 0




Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных