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

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

Admin

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

lexlucky

#496
Не подскажете как корректно в классе прописать изображение? Типа
Код
init python:

    class My_class:
        coordx = 0
        coordy = 0
        my_class_image = "image.png"

define my_param1 = My_class( 10, 10, "image1.png")
define my_param2 = My_class( 20, 20, "image2.png")
define my_param3 = My_class( 30, 30, "image3.png")

define my_params = [my_param1, my_param2, my_param3]


Нужно передать в функцию список из объектов типа My_class, чтобы функция в цикле перебрала список и нарисовала по нужным координатам эти изображения. Что-то типа такого:
Код
init python:

    def my_draw_all(my_params):
        for i in my_params:
            show i.my_class_image:
                xpos = i.coordx
                ypoz = i.coordy


Основная проблема в том что так нельзя прописывать изображения к классе. Как это правильно делать?

Как передавать в функцию список в виде параметра?
Ещё вопрос - есть функция типа:
Код
        add Solid("#0000ff", xsize=234, ysize=360)

Как ей передать первый параметр в виде переменной?

И последний вопрос, теоретический. Какой интерпретатор питона встроен в Ren'Py - CPython, PyPy или что-то другое? Что-то нигде не нашёл.
Сообщение отредактировал lexlucky - Суббота, 21/Июл/2018, 16:53

lexlucky

#497
wow Куда все пропали? wow
Кстати, с первым вопросом разобрался сам.
Цитата lexlucky ()


Собственно в питоне тип переменной динамический, поэтому в классе не важно его указывать(вот теперь не уверен). Нужная переменная автоматически примет тип при присвоении ей значения.
Скажем так:
Код
$ a = Null
# сейчас переменная пуста, у неё нет никакого значения
$ a = 1
# теперь переменная типа int
$ a = "some text here"
# теперь переменная стала строкой
image a = "image.png"
# теперь картинкой


То что написано далее мне работать заставить не удалось.

Сообщение отредактировал lexlucky - Среда, 25/Июл/2018, 09:09

Worgen

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

Код
add "gui/overlay/setting_overlay.png" pos -475, -15
        imagemap:
            alpha False
            auto "gui/config_btns_%s.png" pos 310, 110
            hotspot (20, 0, 110, 23):
                action Preference("display", "any window")
            hotspot (182, 0, 95, 23):
                action Preference("display", "fullscreen")
            hotspot (478, 0, 145, 23):
                action Preference("transitions", "all")
            hotspot (677, 0, 154, 25):
                action Preference("transitions", "none")
            hotspot (0, 125, 137, 27):
                action Preference("skip", "seen")
            hotspot (198, 125, 52, 25):
                action Preference("skip", "all")
            hotspot (575, 125, 50, 25):
                action Preference("after choices", "skip")
            hotspot (680, 125, 65, 25):
                action Preference("after choices", "stop")


И сразу еще один вопрос, как поднять ползунок?
Код
xpos 385
            ypos 353
            maximum (300, 2)
            thumb "gui/overlay/bar.png"
            thumb_offset 16
            left_bar "gui/overlay/bar_full.png"
            right_bar "gui/overlay/bar_empty.png"
            value Preference("text speed")

lexlucky

#499
Worgen,
Ответы на ваши вопросы есть в туториале
К первому вопросу:
Экранные объекты -> Карты-изображения



Ответ на второй вопрос нашёл тут - http://renpyfordummies.blogspot.com/2014/11/blog-post.html
вот кусочек кода из примера оттуда

Muyet

#500
Здраствуйте!

Мне опять нужна ваша помошь :-----)
Не могу разобратся с горячими точками, как их потавить.. В начале года пыталась разобратся, не получилось, вот теперь снова.

Где-то здесь на сайте нашла туториал как это делается, но у меня всё равно error.

Сейчас код вот так:



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

Помогите пожалуйста новичку, а то я совсем не могу понять что не так :<

lexlucky

#502
Два вопроса:
Как у imagebutton работать с параметром selected?
Нужно чтобы было видно по кнопке в каком она состоянии. Есть несколько кнопок и включили их или нет нужно отобразить.
Вообще этот параметр годится для создания кнопок-переключателей?

Как у imagebutton задать параметры xpos и ypos черех переменную? Нужно в цикле раскидать по экрану более полусотни кнопок. Кнопка, её положение и действие описано в классе. (Пытаюсь сделать дерево скиллов)

P.S.: Когда пытаюсь у профиля выбрать аватарку выдаёт ошибку: You are trying to do illegal action!
Пробовал скачать с компа и сделал ссылку на fastpic оба раза одно и то же.
Что я делаю не так?
Сообщение отредактировал lexlucky - Четверг, 02/Авг/2018, 20:54

Worgen

#504
lexlucky, к сожалению, ничего из этого не работает.
1) У меня не запоминает опцию из меню, т.е. все кнопки выглядят одинаково, место того чтобы поменять картинку на активность
2) Вообще ничего не дало, ибо там нету опции как поднять этот ползунок

dmit

#505
небольшой пример для Worgen и lexlucky
Код
label start:
    scene black
    call screen mass_but
    "Вы создали новую игру Ren'Py."
    return
    
screen mass_but():
    default n = 0
    frame:
        pos (200,100)
        xysize (600,60)
        for i in range(9):
            imagebutton:
                selected (i==n)
                xpos i*50
                auto "but_%s.png"
                action SetScreenVariable("n", i)
        text "[n]" align (0.9, 0.5)
        textbutton ">" align (1.0, 0.5)  action Hide("mass_but")

в папке image должны быть файлы:
but_hover.png
but_idle.png
but_selected_hover.png
but_selected_idle.png
размером 50х50
Сообщение отредактировал dmit - Воскресенье, 05/Авг/2018, 00:20
планета FOREVER!!!      Unkenbro team

Erckert

#506
Привет. Не читал всю тему, наверняка уже поднимался вопрос, да и глупый он, но всё же спрошу. Как сделать вывод переменной в интерфейс?
Чтобы на экране всё время где-нибудь в углу висела плашка со значением переменной и обновлялась, когда переменная менялась.
Допустим, плашку можно сделать картинкой, а вот как в её координаты вывести текст и обновлять его, я не совсем вдупляю.

dmit

#507
Код
label start:
    show screen scr
..................................................
screen scr:
    text (str_peremennaya)

на scr экране можете поместить любое оформление - рисунки рамки и т.п.
Сообщение отредактировал dmit - Вторник, 07/Авг/2018, 20:07
планета FOREVER!!!      Unkenbro team

Gremlin12

#509
Как можно реализовать чтобы читатель мог выбрать прозрачность фона(на котором буквы пишутся) из нескольких вариантов в nvl режиме? В папке gui есть файл nvl.png, может как-то для него задается прозрачность? Просто встречал такое в ренпай новеллах, что в опциях есть возможность это настроить.

Ikuku

#510
Задача сводится к следующему:
1. Создать динамичесое изображение (дисплейабл), который будем использовать вместо статического.
2. Создать набор кнопок, которые управляют его состоянием.

1. Везде, где использовался статический фон (по умолчанию "gui/nvl.png", скорее всего будет в файле screens.rpy), вставляем: DynamicDisplayable(set_nvl_bg). Строчка в итоге будет выглядеть как-то так: background DynamicDisplayable(set_nvl_bg)

DynamicDisplayable - это такая штука, которая получает в качестве параметра функцию, а возвращает дисплейабл (картинку) каждые X секунд, и, по умолчанию - с каждым взаимодействием (кликом мыши).

Заводим вспомогательную переменную, в которой будет храниться текущее значение прозрачности:
Код
default nvl_opacity = 1.0


Описываем функцию set_nvl_bg, которая будет управлять прозрачностью:
Код
init python:
    def set_nvl_bg(st, at):
        return Transform("gui/nvl.png", alpha = nvl_opacity), None


st, at - обязательные параметры для любой функции-параметра DynamicDisplayable, нам они в нашем случае не нужны, просто упоминаем и забываем. Transform() - функция, которая принимает картинку/дисплейабл, набор параметров, и изменяет ее согласно этим параметрам. Аналогично ATL-языку. Нам нужен параметр alpha, его значение берем из переменной nvl_opacity. None означает, что DynamicDisplayable следует обновлять только по кликам мыши/взаимодействиям, а не раз в N секунд.

2. Создаем набор кнопок, которые будут управлять фоном. Для примера - в отдельном экране, потом этот блок нужно будет перенести в экран Preferences и настроить по вкусу. Три кнопки с экшенами, которые меняют прозрачность до предустановленных значений + шкала, которая позволяет настраивать прозрачность свободно.

Код
screen nvl_bg_controls():
    zorder 1000

    vbox:
        xsize 200
        spacing 15
  
  textbutton "100%" action SetVariable("nvl_opacity", 1.0)
        textbutton "50%" action SetVariable("nvl_opacity", 0.5)
        textbutton "25%" action SetVariable("nvl_opacity", 0.25)
        
        bar value (nvl_opacity * 100) range 100 changed alpha_adjust

init python:
    def alpha_adjust(x):
        global nvl_opacity
        
        nvl_opacity = x / 100.0
        renpy.restart_interaction()


Код тестового проекта, собранный и готовый к испытаниям (не забудьте поменять статичный фон на DD, п.1):
Код
define nvltest = Character(None, kind = nvl)

screen nvl_bg_controls():
    zorder 1000

    vbox:
        xsize 200
        spacing 15
        
        textbutton "100%" action SetVariable("nvl_opacity", 1.0)
        textbutton "50%" action SetVariable("nvl_opacity", 0.5)
        textbutton "25%" action SetVariable("nvl_opacity", 0.25)
        
        bar value (nvl_opacity * 100) range 100 changed alpha_adjust

default nvl_opacity = 1.0

init python:
    def set_nvl_bg(st, at):
        return Transform("gui/nvl.png", alpha = nvl_opacity), None

    def alpha_adjust(x):
        global nvl_opacity
        
        # делим на сто, т.к. шкала (bar) работает с величинами от 0 до 100, а значение прозрачности - с 0 до 1.0
        nvl_opacity = x / 100.0
        
        # это чтоб фон перерисовывался в реальном времени
        renpy.restart_interaction()

label start:
    show screen nvl_bg_controls

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