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

Ternox
Дата: Вторник, 30.09.2014, 21:50 | Сообщение # 1
Администратор
Сообщений: 569
Награды: 46
Сюда пользователи сайта могут писать вопросы о тех или иных функциях движка Ren'Py, а мы попытаемся на них ответить:)


Прежде чем писать мне в ЛС, загляните в FAQ, возможно там уже есть ответ на ваш вопрос.


Uxal
Дата: Вторник, 28.01.2020, 19:41 | Сообщение # 661
Пользователь
Сообщений: 1
Награды: 0
Есть какая-нибудь документация на чудесную функцию  
Код
anim.TransitionAnimation()

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

dmit
Дата: Вторник, 28.01.2020, 20:04 | Сообщение # 662
Проверенный
Сообщений: 177
Награды: 1
Устаревшая функция, не рекомендуется для новых проектов. https://www.renpy.org/wiki....imation

планета FOREVER!!!

Idealist
Дата: Вторник, 28.01.2020, 20:42 | Сообщение # 663
Пользователь
Сообщений: 10
Награды: 1
создал текстовую новеллу с одной картинкой в виде фона( делал в ренпае). Портировал на андроид. При запуске - error dlopen failed: cannot locate symbol "atof" referenced by "libpng16.so"... Походу картинка слишком большая?

Co4ek
Дата: Среда, 29.01.2020, 19:26 | Сообщение # 664
Пользователь
Сообщений: 2
Награды: 0
Всем доброго вечера. Такой вопрос, можно ли вставить звук в ATL-анимацию?
Код
image bg primer:
    'primer'
    pause(0.5)
    #А здесь нужна команда, вызывающая нужный мне звук.
     'primer'
    pause(0.5)
    #И т.д

СОНЦЕ
Дата: Среда, 29.01.2020, 20:27 | Сообщение # 665
Разработчик
Сообщений: 146
Награды: 25
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.01.2020, 22:31

Co4ek
Дата: Четверг, 30.01.2020, 01:44 | Сообщение # 666
Пользователь
Сообщений: 2
Награды: 0
Цитата СОНЦЕ ()
Если кто знает как это сделать проще\надежнее плз напишите мне тоже интересно :3

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

AxelK
Дата: Пятница, 31.01.2020, 13:53 | Сообщение # 667
Пользователь
Сообщений: 20
Награды: 0
Цитата СОНЦЕ ()
костылем
А можно такой вопрос. Решил воспользоваться редактирование рендера, но не понял, что тут не так.
Вклиниваюсь
   
Код
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
Дата: Суббота, 01.02.2020, 20:42 | Сообщение # 668
Проверенный
Сообщений: 23
Награды: 0
Всем доброго времени суток. Помогите пожалуйста решить такую задачку:
в ренпи есть весьма удобная штука - экран уведомлений, вызываемый функцией renpy.notify()
проблема в том, что при повторном вызове функции предыдущее уведомление скрывается.

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

BenjaminFR
Дата: Воскресенье, 02.02.2020, 12:19 | Сообщение # 669
Проверенный
Сообщений: 2
Награды: 0
Как в ren'py использовать язык как переменную? Т.е., нужно, чтобы при определенном языке вызывалась определенная картинка. Занимаюсь переводом готовой новеллы через renpy translate, был язык по умолчанию - английский, и русский, соответственно. Подскажите, пожалуйста, как это сделать.

KripWorland
Дата: Воскресенье, 02.02.2020, 15:18 | Сообщение # 670
Проверенный
Сообщений: 23
Награды: 0
Цитата BenjaminFR ()
Как в ren'py использовать язык как переменную? Т.е., нужно, чтобы при определенном языке вызывалась определенная картинка. Занимаюсь переводом готовой новеллы через renpy translate, был язык по умолчанию - английский, и русский, соответственно. Подскажите, пожалуйста, как это сделать.
Если перевод делался через tl, то нужно в папку второго языка положить картинку с тем же путем, который был для основного языка.
Например, в игре есть картинка "game\images\img1.png" содержащая английский текст. Для того, чтобы при игре на русском выводилась соответствующая картинка с русским текстом, она должна иметь путь "game\tl\russian\image\img1.png"

Если же нужно именно в скрипте узнать, какой язык установлен, можно использовать переменную _preferences.language
Код
if _preferences.language is None:
    # здесь язык оригинала, т.е. английский
elif _preferences.language == 'russian':
    # здесь русский язык
else:
    # здесь какой-то еще язык


Сообщение отредактировал KripWorland - Воскресенье, 02.02.2020, 15:21

BenjaminFR
Дата: Вторник, 04.02.2020, 11:24 | Сообщение # 671
Проверенный
Сообщений: 2
Награды: 0
Цитата KripWorland ()
Если перевод делался через tl, то нужно в папку второго языка положить картинку с тем же путем, который был для основного языка.Например, в игре есть картинка "game\images\img1.png" содержащая английский текст. Для того, чтобы при игре на русском выводилась соответствующая картинка с русским текстом, она должна иметь путь "game\tl\russian\image\img1.png"

Если же нужно именно в скрипте узнать, какой язык установлен, можно использовать переменную _preferences.language
Благодарю, все вышло. Довольно глупо было не догадаться до этого самостаятельно

СОНЦЕ
Дата: Вторник, 04.02.2020, 15:38 | Сообщение # 672
Разработчик
Сообщений: 146
Награды: 25
Цитата KripWorland ()
Всем доброго времени суток. Помогите пожалуйста решить такую задачку:в ренпи есть весьма удобная штука - экран уведомлений, вызываемый функцией renpy.notify()
проблема в том, что при повторном вызове функции предыдущее уведомление скрывается.

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


Код

init python:
    _notify_list = []
    
    def notify_queue():
        global _notify_list
        if all((not renpy.get_screen('notify'), _notify_list)):
            renpy.notify(_notify_list.pop(0));

screen notify_check():
    timer .5 repeat True action Function(notify_queue)

label main_menu:
    return
    
label start:
    show screen notify_check
    'foo'
    python:
        for i in range(50):
            _notify_list.append(str(i))
            
    'bar'
    return


мой вариант; косее некуда, но, думаю, можно вычленить функцианал и сделать по-нормальному

Цитата AxelK ()
как взять пиксели с самой картинки? Что-то не то я делаю, по всей видимости.

а можно рабочий пример без троеточий? тогда возможно быстрее разберусь

AxelK
Дата: Среда, 05.02.2020, 11:15 | Сообщение # 673
Пользователь
Сообщений: 20
Награды: 0
Цитата СОНЦЕ ()
а можно рабочий пример без троеточий? тогда возможно быстрее разберусь

Можно, конечно. Вырезал всякие лишние переменные, размеры, списки цветов.


Код
init python:
    import pygame_sdl2 as pygame
    import threading
    blit_lock = threading.Condition()
    
    class MyBlit(renpy.Displayable):

        def __init__(self, child, **kwargs):
            super(MyBlit, self).__init__(**kwargs)
            self.child = child
        
        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)
            render.blit(child_render, (0, 0))
            
            c = child_render.canvas().get_surface()
            try:
                blit_lock.acquire()

                # теста ради рисую прямоугольную рамку. такой цвет есть и на картинке
                pygame.draw.rect(c,
                             renpy.easy.color((191, 143, 127, 255)),
                             (1, 2, 100, 200),
                             2)

                rx, ry = 200, 200
                c.lock()
                for i in range(rx):
                    for j in range(ry):
                        pix = c.get_at((i, j))
                        if pix == (191, 143, 127, 255):   # перекрашивает только нарисованную рамку
                            c.set_at((i, j), (255,255,255,255))
                c.unlock()
                
            finally:
                blit_lock.release()
                 
            return render

label test_blit:
    python:
        renpy.scene()
        test_image = MyBlit('test.png')
        renpy.show('_', at_list=[], layer='master', what=test_image, zorder=1, tag='bg', behind=[])

    ' blah blah '
    return

KripWorland
Дата: Среда, 05.02.2020, 21:22 | Сообщение # 674
Проверенный
Сообщений: 23
Награды: 0
СОНЦЕ, спасибо огромное, выручаете в очередной раз))

СОНЦЕ
Дата: Четверг, 06.02.2020, 00:43 | Сообщение # 675
Разработчик
Сообщений: 146
Награды: 25
AxelK,

Код
init python:
    import pygame_sdl2 as pygame
    import threading

    
    class MyBlit(renpy.Displayable):

        def __init__(self, child,cf,ct, **kwargs):
            super(MyBlit, self).__init__(**kwargs)
            self.child = child
            self.child_surf = renpy.load_surface(child)
            self.cf = cf
            self.ct = ct
        
        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()
            c = self.child_surf

            rx, ry = self.width, self.height
            c.lock()
            for i in range(int(rx)):
                for j in range(int(ry)):
                    pix = self.child_surf.get_at((i, j))
                    if pix == self.cf: 
                        self.child_surf.set_at((i, j), self.ct)
            c.unlock()
            
            render = renpy.Render(self.width, self.height)
            render.blit(c, (0, 0))
                 
            return render
label main_menu:
    return
label start:
label test_blit:
    python:
        renpy.scene()
        test_image = MyBlit('test.png',(0,0,255,255),(255,0,0,255))
        renpy.show('_', at_list=[truecenter], layer='master', what=test_image, zorder=1, tag='bg', behind=[])

    ' blah blah'
    return


вот в таком виде пиксели перекрашиваются непосредственно на картинке.
если дорисованный квадратик тоже надо перекрасить: это очевидно можно сделать отдельно.

Код

  c = child_render.canvas().get_surface()

похоже эта строчка не подтягивает пиксели из скормленной рендеру картинки, а лишь дает пространство для квадратика. Почему? пока не знаю smile_82


Сообщение отредактировал СОНЦЕ - Четверг, 06.02.2020, 00:45
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Помощь по Rep'Py (Вопрос\Ответ)
Поиск: