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

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

Admin

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

stop_control

#781
Привет
Может кто сталкивался с проблемкой...

Мы можем  задать картинке псевдоним.
Но мне нужно сделать 100 псевдонимов.

show КАРТИНКА as ПЕРЕМЕННАЯ

Для этого я беру к примеру переменную, увеличиваю ее в цикле на единицу, вывожу картинку... и ничего не происходит.
Вместо 100 картинок я получаю 1.
Значение переменной не передается в оператор.
В итоге выводится 100 раз под псевдонимом ПЕРЕМЕННАЯ

Как задать в оператор "show " динамически меняющийся псевдоним?
«Иди пожалуйся своей мамочке»

Ultra_Scream

#783
AxelK, пропиши такую строчку
renpy.pause(delay=t, hard=True)
где t - время в секундах, в течении которого взаимодействие заблокировано
Зродились ми великої години
З пожеж війни, із полум'я вогнів
Плекав нас біль по втраті України
Кормив нас гнів і злість на ворогів

AxelK

#784
Ultra_Scream, так это надо при каждом вызове перехода писать.
Хотелось бы заблокировать прерывания переходов целиком на некоторых экранов.
Вроде титульного, CG, и так далее

Ultra_Scream

#785
AxelK, так, ситуацию понял. Сомневаюсь, что есть отдельная функция или параметр, который позволяет делать это и не загромождая код в целом. Либо просто не знаю. На крайняк могу предложить, чтобы объявить в начале это действие, так хотя бы одним словом можно будет обойтись при использовании по скрипту. Но более ничего не смогу подсказать
Зродились ми великої години
З пожеж війни, із полум'я вогнів
Плекав нас біль по втраті України
Кормив нас гнів і злість на ворогів

AxelK

#787
stop_control, хотелось бы поконкретней.
100 картинок что сделать, объявить в цикле или показать в цикле?

Код

  python:
        for i in range(100):
            renpy.show ('', what=Image('images/cg/%d.png' % i), tag = 'img%d' % i)
            renpy.pause()

stop_control

#789
Цитата AxelK ()
python:        for i in range(100):
renpy.show ('', what=Image('images/cg/%d.png' % i), tag = 'img%d' % i)
renpy.pause()

Этот код ошибки не вызывает, но и картинки на экран не выводит.

У меня вывод картинки на экран выглядит вот так.

...
show expression img_to_show as count
xanchor 0.5
yanchor 1.0
xpos 0
...

Очень хочется переменную "count" использовать в имени псевдонима.

Хочу отметить что вывод одного изображения - без проблем.
Следующее получает то же имя псевдонима и затирает предыдущее.
Проблема не в выводе, а в псевдониме.
Сообщение отредактировал stop_control - Четверг, 16/Июл/2020, 00:08
«Иди пожалуйся своей мамочке»

AxelK

#790
> Этот код ошибки не вызывает, но и картинки на экран не выводит.
Пути-то, ясно дело, поправить надо. В моём примере картинки лежат в /images/cg/ с именами 0.png, 1.png, ...

> Проблема не в выводе, а в псевдониме
если выводить с указанием tag, ничто не затирается.
в примере выше покажется 100 картинок с разными незатирающимися тегами img0, img1, ...
с помощью тегов их также можно например выборочно убирать с экрана
 renpy.hide ('img1')

если и позицию им менять в зависимости от переменной, то они еще и в разных местах будут
renpy.show( ... , at = [какой_нибудь_transform (i)], ...)


Код
transform test (z):
    xanchor 0.5
    yanchor 1.0
    xpos z * 4
    ypos z * 2

label start:
    python:
        for i in range(10):
            renpy.show ('', at=[test(i)], what=Image('images/%d.png' % i), tag = 'img%d' % i)

stop_control

#791
Спасибо, но я эту запись не понимаю.....
В моем формате меняется картинка и ее параметры увеличение,координаты, направление движения...
Это всего лишь часть кода.
Представьте - летит птица слева направо - картинка в профиль - размер в зависимости от расстояния до экрана.
Потом она повернула на зрителя, картинки меняются до анфаса и размер изменяется в зависимости от расстояния до зрителя.

Меня интересует моя форма записи, без страшной строки "python:"

show expression img_to_show as count

Можно решить проблему в ней?
«Иди пожалуйся своей мамочке»

AxelK

#792
В таком случае мне непонятно, почему картинки не должны сменять друг друга, если это анимация.
Как раз и должен быть один тег, чтоб летела одна птица, а не сто.
Плюс должна быть пауза, не одновременно же все кадры надо увидеть.

> show expression img_to_show as count

label start:
    $ count = 0
    while count < 100:
        $ count += 1
        show expression "кадр_%d"%count as bird
        pause 0.01

кадры должны называться: "кадр_1", "кадр_2" и так далее до "кадр_100"

но
Для анимации лучше бы объявить заранее анимированную картинку со всеми кадрами и показывать ее в нужный момент.

Image bird:
    'frame1'
    pause 0.01
    'frame2'
    pause 0.01
    'frame3'
    pause 0.01
    #...  еще стопятьсот кадров или трансформаций
    # проблема в том, что нельзя задать сто картинок в цикле
    loop

label start:
    show bird
    # дальше можно хоть ждать, хоть показывать диалоги, а птица себе пусть летает.

stop_control

#793
Цитата AxelK ()
Как раз и должен быть один тег, чтоб летела одна птица, а не сто.
Летит стая )
Больше 10 птиц но меньше 100
100 условное максимальное значение. У меня ноут заметно тормозит на 40 движущихся объектах.

Цитата AxelK ()
label start:    $ count = 0
    while count < 100:
        $ count += 1
        show expression "кадр_%d"%count as bird
        pause 0.01
 
Тут логическая ошибка.
Картинки загружаются разные - да.
Но для ренпи каждая картинка имеет имя псевдонима
Выходит вот такая последовательность:

show  bird
show  bird
show  bird

А поскольку имена одинаковые, вывод следующей картинки удаляет предыдущую.
Вопрос остается - как менять имя псевдонима?

Цитата AxelK ()
Для анимации лучше бы объявить заранее анимированную картинку со всеми кадрами и показывать ее в нужный момент.
1 Пробовал через оператор Animation - не понравилось - тормозит.
2. Если просто учитывать фазы направления это 12 картинок, каждая с поворотом через 30 градусов. Если использовать виды сверху и снизу - уже 36.
Если на каждую картинку использовать анимацию из 6 кадров, уже 216 картинок png.
Громоздко выходит.

Скорость движения каждой птицы увы тоже планируется изменяемая во времени.

Движение сейчас упрощенно реализовано через оператор linear.
«Иди пожалуйся своей мамочке»

AxelK

#794
теперь хотя бы задача сформулирована понятно :)

Добавлено (16.07.2020, 10:51)
---------------------------------------------
тогда не вижу способа решить проблему иначе, чем прямыми вызовами соответствующей функции renpy.show



Код
transform bird_pos (x):
    xpos x*100
    ypos 100 +  (x % 2) * 100

label start:

    $ bird_total = 10
    $ frame_count = 5
    $ current_frame = 0
    
    while current_frame < frame_count:
        $ current_frame += 1
        $ current_bird = 0
        while current_bird < bird_total:
            $ current_bird += 1
            $ renpy.show ('',
                at_list=[bird_pos(current_bird)],
                what=Image("f_%d.png" % current_frame),
                tag="bird_%d" % current_bird,
                zorder = current_bird)
        pause 0.03

stop_control

#795
Спасибо всем за ответы.
Последний код выдает ошибку.
Я абсолютно ничего не понимаю.

Буду искать программиста под проект - если решусь начать его делать, либо потрачу следующий год на изучение Ренпи...
Тема закрыта.
«Иди пожалуйся своей мамочке»
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Ren'Py (Вопрос\Ответ)
Поиск: