Пользователи · Поиск по форуму · · Вход в аккаунт · Регистрация |
Форум о визуальных новеллах Для разработчиков Ren'Py Помощь по Ren'Py (Вопрос\Ответ) |
Помощь по Ren'Py (Вопрос\Ответ) |
СОНЦЕ#646палитра и состоит из 3х цветов - красный зеленый и синий. каждый из этих цветов можно "погасить" например если гасить синий, то синий стает черным, а фиолетовый - темно-красным. таким образом получается "органичное" выцветание. Если же нужно "гасить" определенную область рисунка, возможно стоит рисовать ее отдельным слоем, и проводить манипуляции отдельно |
AxelK#647палитра и состоит из 3х цветов - красный зеленый и синий. каждый из этих цветов можно "погасить" например если гасить синий, то синий стает черным, а фиолетовый - темно-красным. таким образом получается "органичное" выцветание.Если же нужно "гасить" определенную область рисунка, возможно стоит рисовать ее отдельным слоем, и проводить манипуляции отдельно И вот над ней операции и надо провести. Старая добрая палитровая анимация Понятно, что не напрямую, но если я знаю, что надо погасить строго цвет #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. Разве это можно обойти? |
СОНЦЕ#649AxelK,
Код 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#650Ничего про индексированные цвета в доках не припоминаю, потому таки да, это не про ренпай и вероятно там все крутится через ргб > 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(No ![]() ![]() # 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)
|
dmit#653Устаревшая функция, не рекомендуется для новых проектов. https://www.renpy.org/wiki....imation
планета FOREVER!!! Unkenbro team
|
СОНЦЕ#656Co4ek, на сколько я знаю напрямую такой команды в 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
|
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, был язык по умолчанию - английский, и русский, соответственно. Подскажите, пожалуйста, как это сделать.
|
| |||