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

Помощь по Ren'Py (Вопрос\Ответ)

Admin

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

Katruna

#1081
stop_control,  как я поняла, человек хочет, что бы посредине одной фразы, с наступлением какого-то этапа - перс менял позу.
т.е. не две разных фразы на разных окнах, а именно между предложениями.

Мне кажется, что это как-то можно провернуть через такую штуку:

Код
gg "Какой-то текст.  {w=0.6} Еще фраза. {w=0.6} И еще одна."

{w=0.6} - делает паузу между предложениями. Но не уверенна, что в эту паузу можно прописать смену картинки..
(но попробовать никто не запрещает)
Сообщение отредактировал Katruna - Понедельник, 15/Мар/2021, 17:26
Художник в душе и в жизни
Дракон в душе и в жизни
Butterfly effect

AxelK

#1082
Нет так не прокатит.
Вот что хотелось бы (вымышленный код который само собой не работает)
 
Код
image girl_sprite:
        "girl_1.png"
        pause [b]1.0[/b]
        "girl_2.png" [b]with Dissolve (0.5)[/b]

    show girl_sprite with Dissolve (0.5)
    girl "Фраза которая произносится 3 секунды." # посреди фразы поза будет поменяна с эффектом


Одна мысль мне показалась подходящей: это модифицировать DynamicImage, чтобы он по таймеру запустил функцию, а уж в функции я бы впихнул любую смену с любым эффектом.
Но это тоже не работает. Ругается на контекст.

То есть вот что я делал (псевдокод, просто идея)
   
Код
def show_live (st, at, delay):
        if st > delay:
            my_custom_function ()
            return Null(0), None
        else:
            return Null(0), 0.5

    def my_custom_function ():
        show  image 2 # вторая картинка

img = DynamicDisplayable(show_live(1.0))
show img # это видно не будет
show image1 # это первая картинка
say phrase


Exception: Cannot start an interaction in the middle of an interaction, without creating a new context.

Periwinkle

#1083
AxelK, попробуйте так объявить:
Код
image anim girl:
        "images/girl.png" with dissolve
        pause 3
        "images/girl2.png" with dissolve

label start:
        show anim girl
         "текст"
Сообщение отредактировал Periwinkle - Понедельник, 15/Мар/2021, 18:38

AxelK

#1084
Periwinkle, а как такой ATL обернуть в функцию?
дело в том, что girl.png и girl2.png в моем случае это довольно хитрые Composite в несколько слоев, которые еще и от переменных зависят и я не могу объявить картинку под каждый случай.
Ну точнее могу, но это будет очень много лишнего текста.

если сильно упростить для удобочитаемости

Код

  def mk_char (id):
        return Composite( (800, 600)
        , (0, 0),"image%d.png" % id
        , (0, 0), "image%d.png" % id
        )

    def show_char (id, _at=[], _layer = 'master', fx=dissolve):
        img = mk_char ( id )
        renpy.show ('', at_list=_at, layer=_layer, what=img)
        renpy.with_statement (fx)


Это для простой картинки хорошо, когда не надо менять позу.
Какой бы придумать метод для программного создания картинок которые будут меняться?
Ведь ATL по-моему не делается так, он только объявляется заранее?

smollvrn

#1085
как экранировать круглую скобку внутри кортежа? чёт двойные не помогают

Добавлено (20.03.2021, 16:16)
---------------------------------------------
сейвы на андройде можно хранить не в системной data/data в пользовательской 'памяти телефона"?
редактировасть сообщения нельзя на форуме? а как благодарить?

СОНЦЕ

#1086
AxelK, как на счет переход dissolve сымитировать в ATL?

Код

image rgb:
    'r'
    1.0
    ease .3 alpha .0
    'g'
    ease .3 alpha 1.0
    1.0
    ease .3 alpha .0
    'b'
    ease .3 alpha 1.0


или например так

Код

image rgbc:
    size (100,100)
    contains:
        'r'
        1.0
        ease .6 alpha .0
    contains:
        'g'
        alpha .0
        1.0
        ease .6 alpha 1.0
        1.0
        ease .6 alpha .0
    contains:
        'r'
        alpha .0
        2.0
        ease .6 alpha 1.0

dmit

#1087
Цитата smollvrn ()
как экранировать круглую скобку внутри кортежа? чёт двойные не помогают
стандартно в питоне знак экрана \

Добавлено (22.03.2021, 22:02)
---------------------------------------------
Как показать картинку из массива байтов (получаю его из тега мп3) минуя запись на диск?

Добавлено (22.03.2021, 23:10)
---------------------------------------------
сделал так:
im.Data(bytes(mass), "default.jpg")

планета FOREVER!!!      Unkenbro team

Katruna

#1088
День добрый. В общем, я не понимаю, что я делаю не правильно. Как-то я уже писала про эту проблему, но она сама же как-то и исчезла..
а сейчас такое не произошло..

Ситуация такая, чаще всего данная ошибка появляется при создании нового проекта. Достаточно добавить всего 1-2 новых строчки в чистый проект и все- данная ошибка будет преследовать меня вечно. Даже если эти строчки скрыть через решетку "#" - движок все равно ругается на них. Непонятная и нездоровая дичь.

Может хоть кто-то предположить отчего и почему это происходит?

Сама ошибка всегда одна и та же.



Ну и на всякий код который сейчас написан в проекте:

Код

  image boom:
            "images/bg.png"
            subpixel True
            rotate 0
            linear 5 rotate 180
            
# Игра начинается здесь:

label start:

   scene bg
   scene boom

    show tree:
        xalign 1.0
        yalign 0.1
        linear 2.0 xalign 0.5

    e "Вы создали новую игру Ren'Py."

    e "Добавьте сюжет, изображения и музыку и отправьте её в мир!"

    return
Прикрепления: 2082397.jpg (28.4 Kb)
Сообщение отредактировал Katruna - Пятница, 26/Мар/2021, 08:32
Художник в душе и в жизни
Дракон в душе и в жизни
Butterfly effect

stop_control

#1089
Прижми все что до метки старт к левому краю. Без табуляции.

"_"   image boom:

Обрати внимание.
«Иди пожалуйся своей мамочке»

СОНЦЕ

#1090
Katruna, у меня подобная проблема возникала из за функции автоотступа следующей строки в редакторе кода. Вроди отступает в нужное место, но делает это не пробелами, а табуляцией. RenPy же символ табуляции на дух не переносит, и выдаст ошибку как только его увидит.
Лечение:
локально - в проблемной скрипте вызываем "Найти и заменить" (у меня это комбинация клавиш ctrl+h) и заменяем

Код
символ [  ]<-в скобках символ табуляции выглядит как большой пробел (!пока тут его нет, придется добыть символ табуляции самостоятельно например в редакторе нажать tab и скопировать тот пробел что получтится)
на [ ] <- четыре обычных пробела

глобально - зависит от редактора - в настройках редактора кода найти графу "отступы" и вместо "табуляция" выбрать "пробелы"
Сообщение отредактировал СОНЦЕ - Пятница, 26/Мар/2021, 13:30

Katruna

#1091
СОНЦЕ, вот как.. ладно попробую..

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

UPD:
В общем, умный гугл помог. Вроде отключила в программе табуляцию и заменила на 4 пробела.
Надеюсь отныне не будет выползать данная проблема .з.

Всем спасибо за помощь.
Сообщение отредактировал Katruna - Пятница, 26/Мар/2021, 13:42
Художник в душе и в жизни
Дракон в душе и в жизни
Butterfly effect

stop_control

#1092
Не знаю как реализовать фоновые шумы, наверное в виде функции....
Возможно ктото уже решал подобную задачу...

Очень хочется запустить воспроизведение случайного звука из  списка (звуков 5),  с указанный громкостью.
После проигрывания до конца сделать паузу в воспроизведение на случайное значение от 5 до 10 секунд и опять передать управление на воспроизведение звука.
И какой-то флаг в виде переменной, чтобы остановить воспроизведение.

И таких потоков запустить несколько от 2 до 4.

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

stop_control

#1094
Цитата dmit ()
посмотри
Спасибо, но я не программист и слабо понимаю  логику кода....
По моему это не совсем то что я ищу.

Работающий мо моему алгоритму выглядит так:


Код
init python:

    ############################################################################

    continueLooping = False

    def queueChanCallback():
        if continueLooping:
            randomswamp = renpy.random.choice( ["sound/bop1.mp3","sound/bop2.mp3", "sound/bop3.mp3"] )
            renpy.music.queue (randomswamp, channel="nature", loop=False, fadein=0, tight=True)
        #renpy.pause(1.0)
        renpy.music.set_queue_empty_callback(queueChanCallback, channel='nature')

    ############################################################################

    ## Канал "nature" для фоновых звуков
    renpy.music.register_channel("nature", "sfx", True)

# Игра начинается здесь:
label start:

    #start music
    $ continueLooping = True
    $ queueChanCallback()

    "Запуск звуков"
    #Now lets stop the music
    $ continueLooping = False
    stop music

    "Остановка звуков"

    #start music again
    $ continueLooping = True
    $ queueChanCallback()

    "Новый запуск звуков"


Звуки воспроизводятся постоянно и непредсказуемо разные,  в этом плане меня все устраивает.
Проблема в паузе.

Если я использую
renpy.pause(1.0)

Код выдает ошибку.

Более конкретный вопрос.
Как мне задать  паузу со сулчайно длительностью от 2 до 5 секунд, в месте где в коде стоит - renpy.pause(1.0)
Сообщение отредактировал stop_control - Суббота, 27/Мар/2021, 18:56
«Иди пожалуйся своей мамочке»

dmit

#1095
Цитата stop_control ()
renpy.pause(1.0)
не понятно зачем там пауза в коде? если это пауза в воспроизведении, то надо в очереди файлов проиграть пустоту  - "<silence 3.0>"
например:
play audio [ "<silence 5.0>", "boom.opus" ] # играть boom.opus начнёт через 5 сек. после вызова
планета FOREVER!!!      Unkenbro team
Поиск: