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

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

Admin

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

dmit

#676
а стоит ли использовать в экране layeredimage? не проще показать файлы цифр по числу? типа:
Код
screen nomer(nn=""):
    frame:
        align (0.5, 0.1)
        has hbox
        for cfr in nn:
            add cfr
СОНЦЕ подвиг на создание примера и с SFont шрифтом - пример
Сообщение отредактировал dmit - Четверг, 13/Фев/2020, 08:21
планета FOREVER!!!      Unkenbro team

СОНЦЕ

#677
Двачую пост dmit-а. можно вот таким кодом объявить циферки, после чего использовать в скрине напрямую

Код

    for i in range(10):
        renpy.image(str(i),Crop((i*16, 0, 16, 16), "digits.png"))


А если удастся запустить это через layeredimage, кинешь в меня исходником плз. Потому что судя по всему на переменные многократно оно реагирует только в команде if. в остальных местах берет значение один раз и навсегда.

Кстати, как вариант - картинку с циферками в ряд можно зарегистрировать как шрифт и дальше толкать как обычный текст - оно будет писать этим шрифтом. примерно так.

Код

init python:
    renpy.register_sfont(u'my_num_font',22,filename='digits.png',charset='0123456789')
    money = 1234567890

label main_menu:
    return

label start:
    scene expression '#aaa'
    show expression Text(str(money),font='my_num_font',size=22,color='#fff') at truecenter
    pause

    return



а файл sfont шрифта - это буквально символы в ряд. только еще для парсинга ему нужна магентовая точка в левом верхнем углу над каждым символом. вот для примера



Вот тут подробнее про то как самому рисовать и регистрировать для ренпи шрыфты
https://www.renpy.org/doc....d-fonts
Прикрепления: 2458931.png (6.6 Kb)

Floyd

#678
Может, и мне кто-нибудь поможет... В общем, хочу сделать выравнивание текста по ширине, ну, как в ворде или в книге. Искал на англоязычных форумах возможные решения, но так и не нашел. Может быть, кто-нибудь знает, как такое реализовать и возможно ли это вообще?

СОНЦЕ

#679
Floyd
Код

init python:
    style.default.justify=True

это по дефолту для всех

Код

define e = Character("Eileen",what_justify=True)

это конкретному персонажу или для конкретного случая

крч justify

Floyd

#680
СОНЦЕ, большое спасибо. Потратил, наверное, больше часа на поиски, а Вы тут почти сразу ответили.

AxelK

#681
dmit , СОНЦЕ : спасибо за подсказки
.

Свой шрифт в данном месте, пожалуй, ни к чему.
Хочу отобразить автоматом весь экран вообще (по идее)
Кроме денег надо несколько других параметров "градусниками" и числами, время суток, день недели и т.д.

Через Layeredimage не выходит.
Попробовал сделать экран. Не знаю, можно проще или нет

Код
## Generic frames.
define gui.frame_borders = Borders(0, 0, 0, 0)
~~~

python:

    # создание картинок
    for i in range(10):
        renpy.image('money_%d' % i, Crop((i*16, 0, 8, 16), "util.png"))
    renpy.image('money_a', Crop((160, 0, 8, 16), "util.png")) # это графическое изображение точки

    # вспомогательная функция
    # добавляю точку для тысяч
    def format_money (a):
        if a < 1000:
            return str(a)
        return '%da%d' % (int(a/1000), int(a%1000))

    screen money (nn=""):
        frame style "money_frame":
            has hbox
            for cfr in nn:
                add 'money_%s'%cfr

    screen Stats:
        modal False
        zorder 0
        style_prefix "stats"
        window:
            add "frame.png"
            use money (format_money (money))

    style money_frame:
        xpos 600
        ypos 20
        xanchor 1.0 # чтоб прижималось к правому краю

    style stats_window is empty
    style stats_window:
        xpos 0
        ypos 0
        xsize 640
        ysize 400


    $ money = 0
    show screen Stats

    pause
    $ money = 10
    pause
    $ money = 200
    pause
    $ money = 304050
    pause

AxelK

#682
Упс. Переменная money  у меня - значение из массива. Конечно, не пересекается с  названием экрана money

AxelK

#685
Касательно перекрашенной картинки с прошлой страницы.
Всё бы ничего, но с такой картинкой на экране нельзя делать save/reload


Код
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "renpy/common/00action_file.rpy", line 372, in __call__
    renpy.save(fn, extra_info=save_name)
TypeError: no default __reduce__ due to non-trivial __cinit__ (perhaps renpy.game.log.log[9].context.scene_lists.layers[u'master'][0].displayable.raw_child.child_surf = <Surface(512x288x32)>)


Я так понимаю, к классу
    class MyBlit(renpy.Displayable):

Надо доопределить еще какой-то стандартный метод типа __reduce__ ?
Или чего-то вроде имени не хватает в __init__  ?

СОНЦЕ

#686
AxelK
Нужен более конкретный пример, вызывающий баг, потому что у меня все работает

dmit, немогуне отметить -  шрифт атмосферный, нраица ^^

AxelK

#687
СОНЦЕ, жаль нет с собой исходников. Попробую в понедельник разобраться. чем моя реализация отличается.

AxelK

#688
Цитата СОНЦЕ ()
Нужен более конкретный пример, вызывающий баг

В общем, работает (у меня) до первого эффекта.

        renpy.show('_', at_list=[truecenter], layer='master', what=test_image, zorder=1, tag='bg', behind=[])
нормально

        renpy.show('_', at_list=[truecenter], layer='master', what=test_image, zorder=1, tag='bg', behind=[])
        renpy.with_statement(Dissolve(0.5))

= ошибка

AxelK

#689
СОНЦЕ, кажися починил. Не знаю, в чём проблема, но это явно что-то при сериализации cpickle

Код

  class MyBlit(renpy.Displayable):

        def __init__(self, child, colors, **kwargs):
            super(MyBlit, self).__init__(**kwargs)
            [b][color=#ff0000]self.child = renpy.displayable(child)[/color][/b]   # вместо  self.child_surf = renpy.load_surface(child)
            self.colors = colors
            self.width = 0
            self.height = 0
        
        def render(self, width, height, st, at):
            displayable_child = renpy.displayable(self.child)
            child_render = renpy.render(displayable_child, width, height, st, at)
            self.width, self.height = child_render.get_size()
            [b][color=#ff0000]surf = renpy.load_surface(self.child)[/color] [/b] # вместо   surf = self.child_surf

            surf.lock()
            for i in range(int(self.width)):
                for j in range(int(self.height)):
                    pix = surf.get_at((i, j))
                    for cf, ct in self.colors:
                        if pix == cf:
                            surf.set_at((i, j), ct)
            surf.unlock()
            pix = None
            render = renpy.Render(self.width, self.height)
            render.blit(surf, (0, 0))
                 
            return render


Теперь отображает, красит, сохраняет и загружает (пока что) без ошибок

Promenadlimpan

#690
Всем привет, не могу понять, как индифицировать класс. К примеру
Код
python:
    class P (Object):
        def __init__(self, name, age, opinion):
            self.Age = age
            self.Opinion = op
            self.name = ""
h = P ("Иван", 12, 1)

label start:
    h "Что-либо"

в таком случае происходит ошибка
Exception: Sayer 'H' is not defined.

Если использовать define
Код
python:
    class P (Object):
        def __init__(self, name, age, opinion):
            self.Age = age
            self.Opinion = op
            self.name = ""

define h = P("Иван", 12, 1)
label start:
    h "Что-либо"
То тоже ошибка

Код
I'm sorry, but an uncaught exception occurred.
While running game code:
  File "game/script.rpy", line 13, in script
.
  File "game/script.rpy", line 13, in <module>

NameError: name 'P' is not defined
-- Full Traceback ------------------------------------------------------------
Full traceback:
  File "game/script.rpy", line 13, in script
    # Определение персонажей игры.
  File "C:\Games\renpy-7.3.5-sdk\renpy\ast.py", line 2110, in execute
    value = renpy.python.py_eval_bytecode(self.code.bytecode)
  File "C:\Games\renpy-7.3.5-sdk\renpy\python.py", line 2052, in py_eval_bytecode
    return eval(bytecode, globals, locals)
  File "game/script.rpy", line 13, in <module>
    # Определение персонажей игры.
NameError: name 'P' is not defined
Windows-8-6.2.9200
Ren'Py 7.3.5.606
Classes 1.0
Sat Feb 29 22:17:06 2020

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