Пользователи · Поиск по форуму · · Вход в аккаунт · Регистрация |
Форум о визуальных новеллах Для разработчиков Ren'Py Помощь по Ren'Py (Вопрос\Ответ) |
Помощь по Ren'Py (Вопрос\Ответ) |
dmit#631не знаю почему не работает replace, но получить следующее утро 8:00 можно так:
Код def next_morning(self): self.alter(days = 1, hours = 8 - self._dt.hour, minutes = - self._dt.minute) Сообщение отредактировал dmit - Воскресенье, 12/Янв/2020, 16:07
планета FOREVER!!! Unkenbro team
|
Mini-Me#633Здравствуйте.
Кто-нибудь может подсказать что нужно подправить: сделал Android Build, при запуске на телефоне экран в котором отображаются диалоги сдвинут вверх (видимо чтобы было quick menu лучше видно), а также имя Character'а ушло немного левее и наезжает на его изображение в фоновой картинке. Как всё это вернуть на то же место, что и в PC версии? |
dmit#634В конце файла screehs есть секция ## Мобильные варианты. Изменяя её можно задавать параметры отличные от ПК. Смотри также variant в документации.
планета FOREVER!!! Unkenbro team
|
UltraRED#635Создаешь персонажа без имени и добавляешь kind=nvl: Код define narrator = Character(None, kind=nvl) А дальше просто используешь этого персонажа на необходимом тексте. Насчет всего остального. Вопрос заключается в том, как сделать некоторые реплики, где указан персонаж в NVL, а другие(тоже, где не указан персонаж) в ADV? Сообщение отредактировал UltraRED - Вторник, 14/Янв/2020, 13:56
|
UltraRED#636Доброго времени суток!
При сборке Android версии игры - выдаёт ошибку: https://drive.google.com/file....sharing Прошу помощи в решении данной ошибки! Мой VK |
AxelK#637Здравствуйте.
Однако, сразу к делу. Испытываю острую потребность хранить данные в массивах (лист). Потенциально массивов несколько, и данные в них разного типа. Объекты такие объявить легко и просто, пользоваться ещё проще, но сохраняться силами ren'py они не хотят ни в какую. По какой-то причине, нагуглить решение тоже не выходит. Питоном доселе не пользовался, если вопрос покажется глупым, просьба не пинать строго. Прямо на официальной странице проекта рассказано, цитирую Цитата In this example: Код define a = 1 define o = object() label start: $ b = 1 $ o.value = 42 only b will be saved. A will not be saved because it does not change once the game begins. O is not saved because it does not change – the object it refers to changes, but the variable itself does not. Так работает и picke, и cPickle. То есть, я могу объявить такого рода объект, прекрасно пользоваться им, но при загрузке сохраненной игры это всё будет утеряно. В чем смысл вообще иметь данные, которые нельзя хранить? Неужели нет изящного и давно запатентованного способа обойти такую несправедливость? Или нужно как-то писать свой класс, который будет как-то перехватывать сохранение и сам себя сериализовывать или что-то в этом роде? Можно, конечно хранить в глобальных переменных что-то вроде A_1, A_15 = x, y вместо A[1], A[15] = x, y да уж больно некрасиво... Знатоки, подскажите, пожалуйста, в какую сторону копать. |
СОНЦЕ#638AxelK,
собственно, как и подметили в мануале, чтоб сохранилось, после лабела старт переменную надо пошелевлить вот в примере как ниже... Код label start: python: A=[] label main: python: A.append(renpy.random.randint(1,10)) 'your numbers can be saved. please save-load to check' '[A]' jump main return ...у меня все работает |
AxelK#639СОНЦЕ,
И это всё? Объявить после метки старт? Код label start: $ A = [0xff] * 256 jump game_start ............. label chapter_x: $ A[0] = 1 Спасибо, вроде и правда работает. Двойной фэйспалм -_- Почему же это в мануалах не вынесено жирными буквами где-нибудь в рамке? Вопрос второй. Как создать ATL переменной длины? Банальная задача - анимация глаз, но кадров может быть 3 или больше Код transform _position (x, y): xoffset 80+x yoffset 16+y transform _eyes (w, h, t): crop (0, 0, w, h) pause t[0] crop (0, h, w, h) pause t[1] crop (0, h * 2, w, h) pause t[2] repeat _timings = [5.0, 0.1, 0.1] _at = [ _position (pos_x, pos_y)] _at.append(_eyes (frame_width, frame_height, _timings)) renpy.show (filename, at_list=_at, layer='master', what=None, zorder=3, tag='eyes', behind=['background','character']) Можно ли написать трансформацию для заранее неизвестного количества кадров? Или надо сделать трансформацию 1 кадра и в цикле запихивать её с нужными параметрами в _at лист? Сообщение отредактировал AxelK - Пятница, 17/Янв/2020, 07:59
|
СОНЦЕ#642AxelK,
Как создать ATL переменной длины?Банальная задача - анимация глаз, но кадров может быть 3 или больше Код init python: def AnimVar(child,w,h,t,vertical = False): return Animation(*list(item for sublist in [(Crop((w*i*(not vertical),h*i*vertical,w,h),'grant2'),fx) for i,fx in enumerate(t)] for item in sublist)) image animated_image = AnimVar('animation_sheet.png',165,230,[.1,.1,.1,.1,.1,.1]) #это пример объявления анимации поставляемой горизонтальной полоской 6 кадров 165 на 230 пикселей каждый #если полоска вертикальная выставить vertical = True Видно что решение страшненькое, но другое вряд ли получится. Мне кажется, если моргающих героев не 50 и они не процедурно генерируемые то лучше не выпендриваться, а ручками прописать каждую ресничку отдельно |
AxelK#643К сожалению у ATL нет (известных мне) адекватных инструментов для реализации данной задачи. Вот решение на реликте доATLовской эпохи. Спасибо за ответы. Я примерно этого и боялся. >> Мне кажется, если моргающих героев не 50 и они не процедурно генерируемые то лучше не выпендриваться, а ручками прописать каждую ресничку отдельно В том и дело, что они процедурно-генерируемые. Получается, способ не подходит? Я ведь не могу создавать image на лету, правильно? Остановился на 2 ATL вариантах всё таки: один для 2-кадровой, другой для 3. Если попадется больше, придется добавлять больше :D Итак, с массивами понятно, с анимацией понятно. Ещё вопрос, на который ответ, кажется, уже знаю. Анимация палитры это совсем не про рэнпай, да? Я не питаю надежд перекрашивать целиком displayable объект, но взять картинку и заменить несколько цветов, после чего подсунуть в renpy.show, конечно, было бы сказочно. |
СОНЦЕ#644Вообще-то можешь Код label start: image black = '#000' scene black 'foo' image white = '#aaa' scene white 'bar' return вот этот код создает имиджи на лету и прекрасно работает. есть конечно и ограничения, но есть и всевозможные обходы ограничений ^^. В общем -- главное поставить задачу, а метод внедрения какнибудь найдется кажется, то, что тебе нужно, называется im.MatrixColor функция которая работает с цветовой обработкой картинок. очень мудреная, но в ней есть пресеты, вчастности можно сдвинуть цвета по hue палитре. возможно это сойдет. |
AxelK#645вот этот код создает имиджи на лету и прекрасно работает. есть конечно и ограничения, но есть и всевозможные обходы ограничений ^^. В общем -- главное поставить задачу, а метод внедрения какнибудь найдется Хм, Так а мне не ко всем цветам надо операции делать, а к строго определенным. Например, "погасить" 2-3 цвета из палитры. |
| |||