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

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

Admin

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

СОНЦЕ

#646
Цитата AxelK ()
. Например, "погасить" 2-3 цвета из палитры.

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

AxelK

#647
Цитата СОНЦЕ ()
палитра и состоит из 3х цветов - красный зеленый и синий. каждый из этих цветов можно "погасить" например если гасить синий, то синий стает черным, а фиолетовый - темно-красным. таким образом получается "органичное" выцветание.Если же нужно "гасить" определенную область рисунка, возможно стоит рисовать ее отдельным слоем, и проводить манипуляции отдельно
Нет-нет, я не имею в виду тру колор. Есть, например, фон с индексированными цветами 4bpp и к нему, само собой палитра.
И вот над ней операции и надо провести. Старая добрая палитровая анимация
Понятно, что не напрямую, но если я знаю, что надо погасить строго цвет #112233 а остальные оставить как есть, то без подготовки предварительно альфа-маски для этого цвета задача довольно любопытная.

AxelK

#648
Цитата СОНЦЕ ()
вот этот код создает имиджи на лету и прекрасно работает. есть конечно и ограничения, но есть и всевозможные обходы ограничений ^^



Мне бы хотелось создать прокручивающийся текст, но если объявить его в начале, то он не подставляется в другой локализации. пытаюсь создать текст на лету через image (чтобы анимировать его перелет снизу-вверх)
  
Код
def my_text_scroll (time, font):
     renpy.image ('credits', Text('[__credits!t]', font=font)
     renpy.show('credits', at_list=[__scroll(time)])


Естественно ругается на объявление image вне блока init. Разве это можно обойти?

СОНЦЕ

#649
AxelK

Код

transform __scroll(time):
    subpixel True
    xanchor 0.0
    xpos 1.0
    linear time xanchor 1.0 xpos 0.0

label main_menu:
    return
label start:
    $__creditslt = 'Билл Гейтс, Тим Кук, Илон Муск'
    $time = 10
    scene expression '#777'
    show expression Text(__creditslt) at __scroll(time)
    'foo'
    'bar'
    return



Ну и да.
Цитата AxelK ()
например, фон с индексированными цветами 4bpp и к нему, само собой палитра.

Ничего про индексированные цвета в доках не припоминаю, потому таки да, это не про ренпай и вероятно там все крутится через ргб

AxelK

#650
Цитата СОНЦЕ ()
Ничего про индексированные цвета в доках не припоминаю, потому таки да, это не про ренпай и вероятно там все крутится через ргб
Так я и не прошу индексированные цвета. Просто заменить один конкретный rgba цвет на другой не менее конкретный

> show expression Text
Это действительно работает. Чтобы программно сделать то же прямо из моей готовой функции пришлось догадаться до
renpy.show ('blah', ... , what = Text() )
А строку текста запихнул прямо сюда же в функцию.
Спасибо :)

AxelK

#651
Просто чтобы добить вопрос об операциях над палитрой.
Если цветов действительно мало (как в моём случае), то, заранее позаботившись об их полной уникальности, можно воспользоваться функцией im.Map().
(то есть если было два цвета #123, лучше сделать, например, #102132 и #112233)

Чтоб не быть голословным, тестовый код, кому интересно
   
Код
python:
        renpy.scene()

        amap=im.ramp(0, 255) # default ramp for alpha channel
        __r, __g, __b = [0]*256, [0]*256, [0]*256 # all other channels are set to 0

        # test palette with a single image
        PAL = {
             '____test': [(0,0,0),(137,103,69),(186,152,103),(239,220,152),(254,254,254)]
        }
        
        img_name = '____test'
        file_name = img_name + '.png'

        # setting up the initial palette
        __pal = PAL[img_name]
        for pixel in __pal:
            r, g, b = pixel
            __r[r],__g[g],__b [b]= r, g, b

        __img = im.Map(file_name, rmap=''.join(map(chr, __r)), gmap=''.join(map(chr, __g)), bmap=''.join(map(chr, __b)), amap=amap, force_alpha=False)
        renpy.show('_', at_list=[], layer='master', what=__img, zorder=1, tag='bg1', behind=[])
        renpy.with_statement(None)

        # now fading to blue channel all colors except black and white (night simulation)
        r, g, b = __pal[1]
        __r,__g[g],__b = 1, 1, b
        r, g, b = __pal[2]
        __r,__g[g],__b = 2, 2, b
        r, g, b = __pal[3]
        __r,__g[g],__b = 3, 3, b

        __img = im.Map(file_name, rmap=''.join(map(chr, __r)), gmap=''.join(map(chr, __g)), bmap=''.join(map(chr, __b)), amap=amap, force_alpha=False)
        renpy.show('_', at_list=[], layer='master', what=__img, zorder=2, tag='bg2', behind=[])
        renpy.with_statement(Dissolve(1.0))[/b][/r]


Естественно, тут надо всё причёсывать, но меня интересовала сама возможность подобной операции.
Впрочем, не уверен, что такую штуку можно таскать по всей игре. Обдумать надо.
Прикрепления: 4856996.png (1.8 Kb)

Uxal

#652
Есть какая-нибудь документация на чудесную функцию  
Код
anim.TransitionAnimation()

? Весь интернет обшарил. Кое-где вижу примеры использования, но это не добавляет понимания.

Idealist

#654
создал текстовую новеллу с одной картинкой в виде фона( делал в ренпае). Портировал на андроид. При запуске - error dlopen failed: cannot locate symbol "atof" referenced by "libpng16.so"... Походу картинка слишком большая?

Co4ek

#655
Всем доброго вечера. Такой вопрос, можно ли вставить звук в ATL-анимацию?
Код
image bg primer:
    'primer'
    pause(0.5)
    #А здесь нужна команда, вызывающая нужный мне звук.
     'primer'
    pause(0.5)
    #И т.д

СОНЦЕ

#656
Co4ek, на сколько я знаю напрямую такой команды в ATL не существует. Но можно пихнуть ее туда UDD костылем

Код

init python:
  class BlitWithSound(renpy.Displayable):

        def __init__(self,child,input_sound):
            super(BlitWithSound,self).__init__()
            self.child = child
            self.snd = input_sound
        
        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()
            render = renpy.Render(self.width, self.height)
            renpy.play(self.snd)
            render.blit(child_render, (0, 0))
            return render


и таким образом код в примере будет выглядить..

Код
image bg primer:
    'primer'
    pause(0.5)
    BlitWithSound('primer','sound.mp3')
    pause(0.5)
    #И т.д


Если кто знает как это сделать проще\надежнее плз напишите мне тоже интересно :3
Сообщение отредактировал СОНЦЕ - Среда, 29/Янв/2020, 21:31

Co4ek

#657
Цитата СОНЦЕ ()
Если кто знает как это сделать проще\надежнее плз напишите мне тоже интересно :3

Большое спасибо, мил человек! Этот способ рабочий и я буду его использовать, если не появится более укороченная альтернатива :)

AxelK

#658
Цитата СОНЦЕ ()
костылем
А можно такой вопрос. Решил воспользоваться редактирование рендера, но не понял, что тут не так.
Вклиниваюсь
   
Код
import pygame_sdl2 as pygame
    import threading
    blit_lock = threading.Condition()

        def render(self, width, height, st, at):
            ...
            render.blit(child_render, (0, 0))
            
            c = render.canvas().get_surface()
            try:            
                blit_lock.acquire()
                pygame.draw.rect(d,.....)
            ...
            return render


Такое работает и рисует поверх картинки всё что надо.
А как взять пиксели с самой картинки? Что-то не то я делаю, по всей видимости.

Код

  try:            
                for i in range(width):
                    for j in range(height):
                        pixel = d.get_at((i, j))

pixel всегда пуст, если я сам предварительно ничего не рисовал, то есть какая-то другая новая канва.

KripWorland

#659
Всем доброго времени суток. Помогите пожалуйста решить такую задачку:
в ренпи есть весьма удобная штука - экран уведомлений, вызываемый функцией renpy.notify()
проблема в том, что при повторном вызове функции предыдущее уведомление скрывается.

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

BenjaminFR

#660
Как в ren'py использовать язык как переменную? Т.е., нужно, чтобы при определенном языке вызывалась определенная картинка. Занимаюсь переводом готовой новеллы через renpy translate, был язык по умолчанию - английский, и русский, соответственно. Подскажите, пожалуйста, как это сделать.
Поиск: