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

Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ)
Помощь по Ren'Py (Вопрос\Ответ)

Admin

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

SteepJoe98

#122
Всем привет, вот вопрос мучает можно ли сделать новеллу по эпизодам? Прям как Telltale Games любит делать. Если да, то как с сохранением будут обстоять дела?
(зарание спасибо)

Alex_Apple

#123
SteepJoe98, А что с сохранениями? Создать в конце игры фаил с данными с помощью питона. Потом открыть с помощью питона и сохранить в виде переменных. Правда я не знаю можно ли сохранить фаил отдельно от игры, где-нибудь в AppData, а потом его оттуда вычитать. А так придеться игрока просить перекинуть.

ProstoiXXX

#124
Есть маленькая проблема в реализации моего желания:) Помогите пожалуйста.
Вкратце проблема такова:
Создаю комнату, но в ней хочу вывести активны кнопки через картинки(imagebutton). То есть когда игрок заходит в комнату, помимо того что он может путешествовать по текстовым кнопкам(textbutton), он также может путешествовать через картинки.И взаимодействовать с комнатой тоже через картинки.
Про кнопки с изображением взял с ютуба Ссылка на ролик

Код

label home:
    show home at left

    #Действие №1
    $ ui.vbox(xpos=0.1, ypos=0.2)
    $ ui.imagebutton("images/dver.jpg", "images/dver2.jpg", clicked=ui.returns("deystvie_dver"))
    $ ui.close()

    # Действие №2
    $ ui.vbox(xpos=0.5, ypos=0.5)
    $ ui.imagebutton("images/krovat.jpg", "images/krovat2.jpg", clicked=ui.returns("deystvie_krovat"))
    $ ui.close()

    $ result = ui.interact()
            
    if result == "deystvie_dver":
        jump kitchen
    if result == "deystvie_krovat":
        jump krovat

    screen home:
        fixed:
            text 'Ваша комната.' xalign 0.0 yalign 1.0 style style.description
            textbutton 'Кухня' xalign 0.05 yalign 0.4 action Function(move, 'kitchen')
            textbutton 'Спальня' xalign 0.05 yalign 0.5 action Function(move, 'bedroom')
            textbutton 'Ванная' xalign 0.45 yalign 0.3 action Function(move, 'bathroom')
            textbutton 'Улица' xalign 0.7 yalign 0.85 action Function(move, 'street')
    call screen home


При клику по первом действие, ГГ переходит в кухню, при клике на втором действие, герой дожиться спать. Сами кнопки(imagebutton) работают, и перекидывают куда надо. Но возникла проблема:
Не показывается, то что ниже screen home. То есть на экран выводяться только imagebutton, а textbutton не выводяться. При попытке разместить код imagebutton в screen home выдает море ошибок.

Alex_Apple

#126
Неудержался и проверил. После чего у меня перестали отбражаться imagebutton. Исправил сменой call screen home на show screen home. Далее нашел такую проблему. При активации текстовых кнопок всё врем кидает на следующий label, то есть кнопка тупо не работает. Исправил так:
Код
textbutton 'Кухня' xalign 0.05 yalign 0.4 action Jump('kitchen')
            textbutton 'Спальня' xalign 0.05 yalign 0.5 action Jump('bedroom')
            textbutton 'Ванная' xalign 0.45 yalign 0.3 action Jump('bathroom')
            textbutton 'Улица' xalign 0.7 yalign 0.85 action Jump('street')

Хотя возможно это только у меня такая проблема.

ProstoiXXX

#127
Alex_Apple если через jump делать, то как привязать к этому переменные? При переходе из комнаты в комнату тратиться время и энергия. Просто предыдущий вариант работал.
Код
label dr_spalnya:
    scene bg dr_spalnya:
        xalign 0.5
        yalign 0.0
    show levo at left
    show pravo at right
    show niz at center

    screen dr_spalnya:
        fixed:
            
            text "Спальня." xalign 0.30 yalign 0.80
            textbutton "Кухня" xalign 0.20 yalign 0.01 action Function(move, "dr_kuchnya")
            textbutton "Спальня" xalign 0.30 yalign 0.01 action Function(move, "dr_spalnya")
            textbutton "Ванная" xalign 0.40 yalign 0.01 action Function(move, "dr_vanna")
            textbutton "Детская" xalign 0.50 yalign 0.01 action Function(move, "dr_komnata")
            textbutton "Гостинная" xalign 0.60 yalign 0.01 action Function(move, "dr_gostinnaya")
            textbutton "Прихожая" xalign 0.70 yalign 0.01 action Function(move, "dr_prichojaya")
            textbutton "Улица" xalign 0.80 yalign 0.01 action Function(move, "dr_ulica")
    call screen dr_spalnya

У меня вот допустим этот код работает на ура, а с имейджботтон проблемы
Сообщение отредактировал ProstoiXXX - Четверг, 19/Ноя/2015, 15:37

Alex_Apple

#128
ProstoiXXX, Если у тебя работает, то зачем менять? Оставляй. Просто у меня не работает. Возможно по причине отсутвтвия какой-то другой важной части кода. Или еще чего-нибудь.
Скажу только что textbutton должен идти перед imagebutton и вызываться через show, а не call. Потому-что код после imagebutton не будет выполняться. А call вызывает screen (или label) и работает до комманды return. После этого он возврачается на место на котором был вызван и продолжает код. А show просто показывает screen.

ProstoiXXX

#129
Алекс подсказали) просто по другому имиджботоны задавать надо было:)
Но возник новый вопрос:) Как сделать время?
В моей голове он выглядит так.
Код
if minuta >= 60:
    minuta -= 60
    hour += 1    

if hour >= 24:
    hour -= 24
    weekday += 1
    number += 1

if weekday >= 8:
    weekday -= 7

if number >= 31:
    number -= 30
    month += 1

if month >= 13:
    month -= 12
    year += 1

Теперь только понять бы, правильно я себе его представляю или нет)? И куда переменные с названием месяцев и дней недели писать надо)

Bradart

#130
Доброго времени суток.
smile_13
Подскажите: возможно ли сделать каким либо образом сохранение прогресса в игре? То есть при прохождении ветки - где то сохранялась информация об этом. smile_57
Иначе говоря: "Чтоб пройти одну ветку, нужно для начала пройти другую или несколько других."

Заранее спасибо.

---------------
Если я правильно понял - необходимо создать глобальную логическую переменную(key), значение которой изначально равно 0. Затем при прохождении ветки меняем на 1 и при прохождении другой ветки проверяем key==1?
Вопрос в том - возможно ли это и если возможно то как?

Добавлено (21.11.15, 04:22)
---------------------------------------------
smile_13 smile_13 smile_13
Сообщение отредактировал Bradart - Суббота, 21/Ноя/2015, 03:27

Alex_Apple

#131
Bradart, Ты имеешь ввиду что после прохождения игры с определенной веткой, при начале новой игры будет доступна ранее не доступная ветка?
Создаём переменную в конце ветки.
Код
if persistent.key == None:
    $ persistent.key = True

Ну и проверяем в нужных местах.

Alex_Apple

#132
ProstoiXXX, У тебя же есть пример с вики, ты забыл про что не все месяцы равны 31 дню, а еще ты забыл про високосные и не високосные годы. Если только у тебя фэнтези мир. Переменные с месяцами и днями недели можешь писать там же где и код проверки.
Я бы использовал код с вики. Его только исправить, чтобы месяцы и годы менялись и информацию как надо показывал.
Сообщение отредактировал Alex_Apple - Суббота, 21/Ноя/2015, 10:56

Bradart

#133
Alex_Apple, Спасибо огромное! Не мог разобраться.)
happy funny

Добавлено (21.11.15, 12:51)
---------------------------------------------
smile_27 Работает!!! Это всё меняет на корню! smile_39

ProstoiXXX

#134
Господа вопрос опять по часам и времени. За образец брал статью на Вике.Ссылка на часы в Вике

Создаю файл Vremya.rpy. Код который в файле, под спойлером.


Потом в label start создаю переменные.
Код

    $ minutes = 750#must be initially defined.
    $ clock = True#make false to hide the calendar
    $ theweekday = 3#tuesday, the number of the weekday, this automatically changes but must be initially assigned
    $ themonth = 9#september, the number of the month, this automatically changes but must be initially assigned
    $ theday = 21#this automatically changes but must be initially assigned
    $ theyear = 2010#this automatically changes but must be initially assigned
    $ dayofyear = 264#you must calculate this properly, this automatically changes
    $ yearlim = 365#initially define it as 265 or 366, whichever is correct, this gets changed automatically later
    $ daylim = 30#initially define it as 28, 29, 30, or 31, whichever is correct, this gets changed automatically later
    $ stringweekday = "Tuesday"#3, the string of the weekday, this automatically changes but must be initially assigned
    $ stringmonth = "September"#9, the string of the month, this automatically changes but must be initially assigned


Потом через init такую часть кода, чтоб выводить на экран время с календарем.
Код

init:
    screen vremya:
        if(clock):
            $ Calendar()
            $ Clocks()


Потом через label start вывожу время.
Код

label start:
    show screen vremya

Все работает, все великолепно. Время двигаю вот таким способом $ minutes +=15. То есть когда код выгляди как ниже, все работает. Крутиться часы, дни, недели, месяцы и годы.
Код

label proverka:
    '1'
    $ minutes += 30
    '2'
    $ minutes += 30
    '3'
    $ minutes += 30

Но после этого возникает проблема. Я создал локации, и они прекрасно работают. Чтоб перемещаться между ними textbutton Как я это реализовал, описано кодом ниже.
Код

label dr_kuchnya:
    scene bg dr_kuchnya
    screen dr_kuchnya:
        fixed:
            text 'Кухня.' xalign 0.30 yalign 0.80
            textbutton 'Кухня' xalign 0.01 yalign 0.01 action Function(move, 'dr_kuchnya')
            textbutton 'Поесть' xalign 0.4 yalign 0.6 action [Function(move, 'dr_kuchnya')]
            textbutton 'ПРОВЕРКА' xalign 0.5 yalign 0.5 action Jump('proverka')
            textbutton 'Спальня' xalign 0.01 yalign 0.06 action Function(move, 'dr_spalnya')
            textbutton 'Ванная' xalign 0.01 yalign 0.11 action Function(move, 'dr_vanna')
            textbutton 'Детская' xalign 0.01 yalign 0.16 action Function(move, 'dr_komnata')
            textbutton 'Гостинная' xalign 0.01 yalign 0.21 action Function(move, 'dr_gostinnaya')
            textbutton 'Прихожая' xalign 0.01 yalign 0.26 action Function(move, 'dr_prichojaya')
            textbutton 'Улица' xalign 0.01 yalign 0.31 action Function(move, 'dr_ulica')
    call screen dr_kuchnya

Функция [b]move [/b ]выглядит так.
Код

init -1 python:
    def move(where):
            global energy, minutes
            energy -= 1
            minutes += 30
            renpy.jump(where)

То есть при перемещение по комнатам, каждый раз прибавляется 30 минут, и это тоже все прекрасно работает. Но есть проблема. Сутки не обновляется. То есть после 12:59PM, не происходит прыжок к 1:00АМ, а продолжает крутить PM. То есть вначале 18:00PM потом и 42:00РМ и так далее. Подскажите как это прекратить? Как сделать обновления суток?

Alex_Apple

#135
ProstoiXXX, Странно это. Я долго думал и решил, что если через def не изменяется то надо подругому.
И так для начала:
Код
label move:
    $ energy -= 1
    $ minutes += 30
    return

Затем:
Код
            textbutton 'Кухня' xalign 0.01 yalign 0.01 action ui.callsinnewcontext('move'), Jump('dr_kuchnya')
            textbutton 'Поесть' xalign 0.4 yalign 0.6 action ui.callsinnewcontext('move'), Jump ('dr_kuchnya')
            textbutton 'ПРОВЕРКА' xalign 0.5 yalign 0.5 action Jump('proverka')
            textbutton 'Спальня' xalign 0.01 yalign 0.06 action ui.callsinnewcontext('move'), Jump ('dr_spalnya')
            textbutton 'Ванная' xalign 0.01 yalign 0.11 action ui.callsinnewcontext('move'), Jump ('dr_vanna')
            textbutton 'Детская' xalign 0.01 yalign 0.16 action ui.callsinnewcontext('move'), Jump ('dr_komnata')
            textbutton 'Гостинная' xalign 0.01 yalign 0.21 action ui.callsinnewcontext('move'), Jump ('dr_gostinnaya')
            textbutton 'Прихожая' xalign 0.01 yalign 0.26 action ui.callsinnewcontext('move'), Jump ('dr_prichojaya')
            textbutton 'Улица' xalign 0.01 yalign 0.31 action ui.callsinnewcontext('move'), Jump ('dr_ulica')
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ)
Поиск: