Неотъемлемой частью всех визуальных новелл, несомненно, является изображение. Работа с изображениями начинается с объявления в скрипте. Для объявления спрайтов, фонов и CG-артов необходимо в скрипте написать следующее:
Код
image sprite = "sprite.png"
Где sprite, название изображения, которым будет вызываться спрайт/фон/CG в игру.
А "sprite.png", расположение самого изображения в директории игры.
Так же можно объявлять и анимацию, которая может состоять как из двух спрайтов, так и из 256. Это предел объявлений изображений для одной анимации. Но предупреждаю, большое количество спрайтов будут долго прогружаться с первым выводом анимации на экран.
Цифры (0.2), это период появления каждого кадра. К примеру, последнему кадру можно присвоить время (999.0), и тогда получится, что после первого проигрывания анимации, последний кадр остановится на 999 секунд.
"sprite1.png", ..., "sprite4.png", название объявляемых изображений. P.S.Изображение также могут лежать и в папках, тогда полный путь будет выглядеть примерно так: "catalog/sprite1.png"
Обычно объявление находиться в верхней части скрипта, выше label start: Но я советую выносить объявления в отдельный скрипт.
Для этого:
1.Находясь в редакторе выбрать в верхнем меню вкладку File (Файл) 2.Нажать на: 2.1. Для Editra - New Tab (Ctrl + N) 2.2. Для jEdit - Создать (N) 2.3. Для блокнота - Создать (Ctrl + N) 3. Написать объявления изображений 4. Сохранить назвав (название_скрипта).rpy P.S.S. У меня это image.rpy
Вывод изображений в игре
После того, как мы научились объявлять изображения и анимации, пора научиться вызывать их в игре.
Спрайты, так же как и фоны, а также анимации, вызываются внутри label ...:
Код
show sprite
Вызывает изображение/анимацию, накладывается поверх уже вызванных изображений, если таковы имеются.
Код
scene sprite
Вызываясь, закрывает все уже вызванные спрайты/фоны/анимации. Полезно для быстрой смены фона.
Код
hide sprite
Скрывает изображение.
Так же, при вызове изображений и анимаций можно указать место их расположения ("at"):
Код
show sprite at right
Для расположения в правом углу экрана.
Код
show sprite at center
Для расположения по центру экрана. Если атрибут ("at") не задан, изображение стандартно выводится в центр экрана..
Код
show sprite at left
Для расположения в левом углу экрана.
Изображения можно вызывать с эффектами ("with")
Код
show sprite with dissolve
С эффектом ("dissolve") изображения буду выводиться плавно, стандартно, в течении одной секунды. Иные эффекты: fade - плавное затемнение/появление изображения.
dissolve - плавное появление спрайта, но если вызывается фон - плавно растворяет первый фон и также плавно, выводит второй.
pixellate - появление/исчезание/замещение с эффектом пикселизации.
vpunch - появление изображения с эффектом тряски всего экрана, по координате y. hpunch - появление изображения с эффектом тряски всего экрана, по координате x.
blinds - вывод с эффектом - вертикальные жалюзи
squares - появление с эффектом - небольшие квадраты
wipeleft / wiperight / wipeup / wipedown - постепенная заливка изображения в определённую сторону.
irisin / irisout - появление/исчезание используя прямоугольную диафрагму, визуально схожа с wipe
Возможно использование эффекта просто ("move"). Но тогда указывать стороны придется самостоятельно, при условии что данное изображение уже выведено на экран:
Код
show sprite at center show sprite at left with move
Доступные направления - left; right; center; offscreenleft; offscreenright; top
Бывает и такое, что необходимо одновременно, вывести на экран пару изображений с одним эффектом.
Код
show sprite1 at left show sprite2 at center show sprite3 at right with dissolve
Вывод всех трёх спрайтов одним эффектом плавного появления. Это работает не только с dissolve, а с большинством эффектов.
Код
show sprite1: yalign .5 subpixel True xalign .5 subpixel True
Спрайт появится в центре экрана. Координаты вводятся с плавающей точкой (".3" / ".7").
Код
show sprite1: zoom 0.5
Вывод изображения с размером 50% от оригинала.
Код
show sprite1: linear 3 rotate 360
Вращение спрайта по часовой стрелки со скорость - 360 градусов за 3 секунды.
тоже недавно разбирался с выводом изображений. был такой код:
scene bg sky with dissolve show bird small: ..xalign 0.5 yalign 0.0 rotate 0 ..alignaround (0.5, 0.5) ..linear 5.0 yalign 0.0 clockwise circles 1 rotate 360 ..repeat "Лети, бдичга!"
bird small - имя спрайта. может быть просто bird, смотря как объявите. птичка должна смотреть вправо: тогда код сработает правильно и она будет кружить по экрану. вот так:
А как можно скроллировать фон, например если изображение в 2-3 раза больше по длинне выводимого окна или по высоте? Как задать направление скролла, скорость прокрутки, повтор скролирования? Есть ли вообще такая возможность?
# я бы с помощью анимаций и трансформаций сделал: # инициализация картинки # у меня она размером 1200x600, # так что скролл будет горизонтальным image bg big = "gfx/bg_big.jpg"
label start: ....# показываем картинку, после двоеточия - анимация ....show bg big: ........# задаём выравнивание по левому краю ........# (Xalign - горизонт, 1.0 - левый край) ........xalign 0.0 ........# линейно меняем за 2 секунды ........# выравнивание на правый край ........linear 2.0 xalign 1.0 ........# и обратно ........linear 2.0 xalign 0.0 ........# зацикливаем ........repeat ....# можно убрать repeat и поставить паузу, ....# чтобы текстовое окно не сразу появлялось ....pause 4.0 ...."Готово." ....return
А у меня вот такой вопрос: допустим я объявил переход, вызвал с ним сцену - всё отлично. Затем поверх сцены вызвал спрайт персонажа и снова вызвал переход на другую сцену. И конечно, сцена начала изменятся целиком, вместе со спрайтом персонажа. А мне бы хотелось сотворить нечто такое: чтобы бекграунд менялся, а спрайт по-прежнему оставался нетронутым. Вопрос вроде простой, но хотелось бы разобраться.
init python: # лениво объявлять все картинки вручную config.automatic_images = [" ", "_", "/"] config.automatic_images_minimum_components = 1 config.automatic_images_strip = ["images"] label start: scene bg first show eileen happy with dissolve "Бла-бла-бла..." show bg second with dissolve pause return
делаю также - срайт Эйлин пропадает за фоном, как раньше... [code] image green = "2.png" image red = "3.png" image el="img/eileen_happy.png"
define e = Character('Эйлин', color="#c8ffc8", show_two_window=True)
label start: scene green with dissolve show el show red with dissolve pause return [/code] после вызова бекгаунда red спрайт Эйлин пропадает за ним. Что не так? Или я недоразвитый идиот?
не так же делаешь, совсем не так же. не работает потому, что тег надо использовать какой-нибудь. например, добавить перед фонами bg, как в примере. тогда с картинками bg green и bg red renpy будет работать как с одним спрайтом bg (с разными его состояниями, как eileen happy и eileen norm). если уже есть такой спрайт на сцене (bg green), то bg red заменит старый bg (который green) на новый bg (red), а не выведет новый (red) поверх всех других спрайтов.
это не невнимательность, а всего-лишь недостаток опыта работы с поисковыми системами. для того чтобы успешно находить ответы, например, в гугле, стоит начинать запрос со слова "renpy" и запомнить несколько терминов, по которым вы чаще всего будете искать подробности. так же следует учесть, что на английском ответ найти в разы легче. например, я хочу узнать, как поменять шрифт в заголовке текстового окна. захожу в переводчик и узнаю, что шрифт - это font. а так же помню, что окно с текстом называется textbox - коробочка с текстом)) в итоге на запрос renpy saybox font по первой же ссылке находится тема «Customizing Textbox Appearance», где английским по белому написано, что для смены шрифта в окошке с именем говорящего, нужно добавить строку типа:
Код
style.say_label.font = "myfont.tff"
знаю, что меня никто не просил рассказывать очевидные вещи о том, как нужно гуглить. но лучше научиться этому, и куча вопросов сразу отпадёт сама собой. удачи в новеллостроении!
Здравствуйте! Подскажите, пожалуйста, можно ли в эффектах фона как-то задать появление изображения по "циферблату"? Ну, как бы отобразить в частности Начало Нового Дня в игре, чтобы изображение появлялось как бы вслед стрелки часов, быстро махнувшей по кругу =) Надеюсь, кто-нибудь понял, что я имею в виду. Картинка загружается словно по кругу справа налево озаряя "чёрный экран" своим содержанием, буквально за секунду) Типа "часики" эффект какой-нибудь)
Имеется вопрос: есть вытянутые изображения, которые мы умеем прокручивать по всей длине. Всё замечательно, но если мы делаем комнату с изображениями (класс Gallery), то как быть с этой прокруткой (он просто берёт и показывает низ изображения)? Если нельзя прокрутить, то можно ли заставить его показать картинку по заготовленным вырезанным кусочкам (видел в Katawa Shoujo, как показывались так несколько картинок в одной)? Заранее спасибо.
Привет! А мне приснилось или в РенПи есть функция ЗАТЕМНЕНИЯ спрайта под "ночь"? оО такое ощущение, что я об этом где-то прочитал =) А теперь найти не могу, под "ночные" BG можно спрайты Затемнить в RenPy?
Оу, попробую) Тут для всей сцены разом, правда (БГ и Спрайт), а я предполагал только для спрайта. Но, может, так даже удобнее будет, хм) Особенно в плане коридоров =) День или ночь =) Спасибо, надо потестить!
Подскажите, я правильно понимаю, что в renpy при объявлении изображений обязательно должны совпадать имя файла и текст в скрипте? Например так: image bg crab = "images/crab.jpg" scene crab В таком варианте все работает.
Если имя файла отличается от переменной, то изображение не находится. Например так: image bg beach = "images/samui_34.jpg" scene beach Картинка не находится.
Если переименовать файл samui_34.jpg в beach.jpg и соответственно изменить скрипт, то все ок. Не нашел в документации явного указания на это. Заранее спасибо.
Я возможно совсем невнимательный и непонятливый...Но в уроках по было сказано, что "Фоновые изображения должны быть того же размера, что и выбранное для игры разрешение. По умолчанию — 800х600 пикселей" . Отсюда вытекает вопрос, можно ли менять разрешение ? Потому что я рисую в SAI и если выбирать в размерах такой формат, могу качественно прорисовать, в основном лишь фоны, персонажей никак, в силу того, что детально прорисовывать лица невозможно, причиной чему является пикселизация, которая происходит при приближении. Надеюсь на ответ, заранее благодарю.
Открываешь скрипт options.rpy, потом ищешь вот эти две строчки: config.screen_width = 800 config.screen_height = 600 И меняешь разрешение экрана, к примеру: config.screen_width = 1280 config.screen_height = 800
Сложно сказать... Многие любят привычный маленький экран 800x600, к тому же под него проще рисовать. Другие любят разрешение повыше и вообще пошире. Я предпочитаю 1280x720 - такое разрешение, на мой взгляд, оптимальное. Оно и большое, и у всех в экраны поместится, и не слишком надоест любителям маленьких экранов. В принципе, разрешение можно сделать какое угодно, но помните, что мало у кого есть такой огромный экран, разрешением 1920x1080. Но, конечно, это ваш выбор.
помогите не смог найти, как вывести информацию из переменной в картинку. у меня мини игра где есть счет побед,проигрышей и ничья, но я не знаю как эту информацию вывести на экран игры например в правый угол.
А что требуется, чтобы поместить поверх обычной картинки, например, анимацию падения лепестков сакуры. Надо чтобы фон анимации был прозрачен и просто класть поверх или есть что-то еще?
Зачем тебе диалоговое окно если ты делаешь мод? Если ты делаешь мод (к примеру для Бесконечного лета), то экран say тебе не нужен. Там в самой новелле уже всё сделано. :)
Люди, я ищу-ищу, никак не могу найти. Новеллу делаю от первого лица - нужно чтобы картинка главного героя была поверх текстового блока. Я вообще не понимаю, как это сделать.
Нужна помощь??? У меня есть определенная картинка и она больше экрана игры в высоту,как сделать так чтобы при её выведении на экран камера начинала двигаться вверх до конца,а потом вниз?
я в character добавляю такую штуку show_side_image=Image("Images/en.png", xalign=0.0, yalign=1.0). Соответственно, выходит, что на каждую эмоцию свой character. Целиком оно выглядит так: $ en = Character(u'Имя гг', window_left_padding=270, show_side_image=Image("Images/en.png", xalign=0.0, yalign=1.0), color="#00cc66", what_color="#00ffcc", who_drop_shadow=[ (2, 1) ,(3, 2), (4, 3), (5, 4), (6, 5) ], who_drop_shadow_color="#006666" ). Но не факт, что это правильно. Возможно, есть вариант намного удобнее.
Здравствуйте. Подскажите мне, о наимудрейшие, можно ли как-то задержать картинку? Попытаюсь объяснить : вышла картинка фона, и сразу пошел диалог, но мне нужно, что бы эта картинка задержалась. Надеюсь, вы меня поняли. Спасибо.
Все очень просто :) Пиши следующий код после вызова изображения: window hide pause window auto
Команды с виндоу прячут и показывают текстбокс соответственно. Пауза ждет, пока ты нажмешь кнопку. После команды паузы можно указать время, тогда кнопку жать необходимости нет.
Можно попытаться со спрайтами. Код,конечно, написать не могу(ибо тоже лошик)), но опишу как смогу. можно создать несколько спрайтов со вспышкой, а затем изобразить их в качестве анимации(поочерёдно вписывать код, но с этим возможны проблемки. Сам не пробовал ибо фонов у меня нет и вообще то мне в новеллах пока не пригождалось) либо взять один спрайт и с помощью zoom увеличить его в размерах, затем изменить фон. честно, я не мастер, но такие алгоритмы вполне могут помочь.
Ребята, искренне надеюсь, что хоть кто-нибудь поможет, кхм, подскажите, пожалуйста: Может ли renpy запоминать атрибуты заданные для спрайта конкретного персонажа при использовании оператора transform? Например: в процессе диалога между двумя персонажами, где они стоят в разных частях экрана.
Код
define v = Character ('V') image v1 = (images/v1.png) image v2 = (images/v2.png) image v3 = (images/v3.png) label start: transform duo_left: xalign .25 yalign 1.0 #еще всякие настройки после которых идет jump day_1
label day_1: show v1 with dissolve #спрайт появился по дефолту в центре "блаблабла" "блаблабла" hide v1 with dissolve
#какой-то кусок где не нужен спрайт
show v2 at duo_left with dissolve "блаблабла" show v3 #спрайт появился поверх предыдущего, в том же местоположении "блаблабла" show v1 #допустим тут начинаются проблемы, когда спрайт снова появился в центре, как default "блаблабла" hide v1 #пропадает тот, что появился по центру, прежние остались на месте #если же ввести hide v3 with dissolve, то останется тот спрайт - v2 -, который был под тем, который я бы скрыла
Можно ли осуществить задуманное, если я хоть как-то понятно объяснила возникающую проблему, и как можно ее решить? з:
Ребят, как исправить появление спрайта поверх диалогового окна? Когда я выводил его через "show image" - всё было нормально, но когда я прописал это же изображение к конкретному персонажу, то оно начало загораживать собой диалог.
привет! такая проблема: пишу код для нескольких спрайтов ( show sprite1 at left show sprite2 at center show sprite3 at right with dissolve) - выводит только один спрайт. в чем проблема никто не знает?
Комментарии к записи: 64
Спасибо, очень порадовало. Когда то было надо, по-быстрому не смог найти...
был такой код:
scene bg sky with dissolve
show bird small:
..xalign 0.5 yalign 0.0 rotate 0
..alignaround (0.5, 0.5)
..linear 5.0 yalign 0.0 clockwise circles 1 rotate 360
..repeat
"Лети, бдичга!"
bird small - имя спрайта. может быть просто bird, смотря как объявите.
птичка должна смотреть вправо:
тогда код сработает правильно и она будет кружить по экрану.
вот так:
Как задать направление скролла, скорость прокрутки, повтор скролирования?
Есть ли вообще такая возможность?
# инициализация картинки
# у меня она размером 1200x600,
# так что скролл будет горизонтальным
image bg big = "gfx/bg_big.jpg"
label start:
....# показываем картинку, после двоеточия - анимация
....show bg big:
........# задаём выравнивание по левому краю
........# (Xalign - горизонт, 1.0 - левый край)
........xalign 0.0
........# линейно меняем за 2 секунды
........# выравнивание на правый край
........linear 2.0 xalign 1.0
........# и обратно
........linear 2.0 xalign 0.0
........# зацикливаем
........repeat
....# можно убрать repeat и поставить паузу,
....# чтобы текстовое окно не сразу появлялось
....pause 4.0
...."Готово."
....return
# лениво объявлять все картинки вручную
config.automatic_images = [" ", "_", "/"]
config.automatic_images_minimum_components = 1
config.automatic_images_strip = ["images"]
label start:
scene bg first
show eileen happy with dissolve
"Бла-бла-бла..."
show bg second with dissolve
pause
return
[code]
image green = "2.png"
image red = "3.png"
image el="img/eileen_happy.png"
define e = Character('Эйлин', color="#c8ffc8", show_two_window=True)
label start:
scene green with dissolve
show el
show red with dissolve
pause
return
[/code]
после вызова бекгаунда red спрайт Эйлин пропадает за ним. Что не так? Или я недоразвитый идиот?
навскидку могу назвать как минимум три способа поменять фон главного меню.
в файле options.rpy найти строку mm_root = "#393939" и вместо шестнадцатиричного значения цвета фона указать картинку для фона. пример:
то же самое делает следующая строка в разделе «init:» любого файла *.rpy:
так же можно открыть файл screens.rpy, найти раздел «main_menu» и после «style "mm_root"» добавить строку:
ну и ещё можно сначала создать анимацию и подсовывать её в качестве фона вместо имени файла. но вам пока рано...
для того чтобы успешно находить ответы, например, в гугле, стоит начинать запрос со слова "renpy" и запомнить несколько терминов, по которым вы чаще всего будете искать подробности. так же следует учесть, что на английском ответ найти в разы легче.
например, я хочу узнать, как поменять шрифт в заголовке текстового окна. захожу в переводчик и узнаю, что шрифт - это font. а так же помню, что окно с текстом называется textbox - коробочка с текстом))
в итоге на запрос renpy saybox font по первой же ссылке находится тема «Customizing Textbox Appearance», где английским по белому написано, что для смены шрифта в окошке с именем говорящего, нужно добавить строку типа:
знаю, что меня никто не просил рассказывать очевидные вещи о том, как нужно гуглить. но лучше научиться этому, и куча вопросов сразу отпадёт сама собой.
удачи в новеллостроении!
Подскажите, пожалуйста, можно ли в эффектах фона как-то задать появление изображения по "циферблату"? Ну, как бы отобразить в частности Начало Нового Дня в игре, чтобы изображение появлялось как бы вслед стрелки часов, быстро махнувшей по кругу =)
Надеюсь, кто-нибудь понял, что я имею в виду. Картинка загружается словно по кругу справа налево озаряя "чёрный экран" своим содержанием, буквально за секунду) Типа "часики" эффект какой-нибудь)
Спасибо!
Заранее спасибо.
# Объявляйте изображения здесь, используя оператор image.
# например, image eileen happy = "eileen_happy.png"
image Castle "Castle.png"
# Определение персонажей игры.
define e = Character('Эйлин', color="#c8ffc8")
# Игра начинается здесь.
label start:
show Castle
e "Вы создали новую игру Ren'Py."
e "Добавьте сюжет, изображения и музыку и отправьте её в мир!"
return
Но при запуске выдаёт ошибку
File "game/script.rpy", line 5: expected '=' not found.Помогите пожалуйста
image Castle = "Castle.png"
А мне приснилось или в РенПи есть функция ЗАТЕМНЕНИЯ спрайта под "ночь"? оО такое ощущение, что я об этом где-то прочитал =) А теперь найти не могу, под "ночные" BG можно спрайты Затемнить в RenPy?
http://renpyfordummies.blogspot.ru/2015/02/blog-post.html
Но, может, так даже удобнее будет, хм) Особенно в плане коридоров =) День или ночь =) Спасибо, надо потестить!
Открываешь и смотришь
...словом, символом или* буквой...
Извиняюсь за допущенные ошибки, небольшие проблемы с клавиатурой. :)
show sprite at right - поместить справа
show sprite at left - поместить слева
show sprite at center - поместить по центру
Или можно по позициям (заместо нулей укажите свою позицию):
show sprite at Position(xalign = 0.0)
или
show sprite at Position(xpos = 0)
Например так:
image bg crab = "images/crab.jpg"
scene crab
В таком варианте все работает.
Если имя файла отличается от переменной, то изображение не находится.
Например так:
image bg beach = "images/samui_34.jpg"
scene beach
Картинка не находится.
Если переименовать файл samui_34.jpg в beach.jpg и соответственно изменить скрипт, то все ок.
Не нашел в документации явного указания на это.
Заранее спасибо.
По умолчанию находится на 20-21 строке кода.
config.screen_width = 800
config.screen_height = 600
И меняешь разрешение экрана, к примеру:
config.screen_width = 1280
config.screen_height = 800
image bg2 = "2.jpg"
ФАЙЛ ВЕСИТ МЕНЬШЕ 1.00 МБ(75.2 КБ)
НО СУК. ОН НЕ РАБОТАЕТ
перепробовала ВСЕ!
image bg2 = "2.jpg"
scene bg 2
kek
Многие любят привычный маленький экран 800x600, к тому же под него проще рисовать. Другие любят разрешение повыше и вообще пошире.
Я предпочитаю 1280x720 - такое разрешение, на мой взгляд, оптимальное. Оно и большое, и у всех в экраны поместится, и не слишком надоест любителям маленьких экранов.
В принципе, разрешение можно сделать какое угодно, но помните, что мало у кого есть такой огромный экран, разрешением 1920x1080.
Но, конечно, это ваш выбор.
у меня мини игра где есть счет побед,проигрышей и ничья, но я не знаю как эту информацию вывести на экран игры например в правый угол.
image sprite = LiveComposite(
(x, x),
(0, 0), "sprite_1.png",
(0, 0), "sprite_2.png",
(0, 0), "sprite_3.png"
)
У меня есть определенная картинка и она больше экрана игры в высоту,как сделать так чтобы при её выведении на экран камера начинала двигаться вверх до конца,а потом вниз?
Пиши следующий код после вызова изображения:
window hide
pause
window auto
Команды с виндоу прячут и показывают текстбокс соответственно. Пауза ждет, пока ты нажмешь кнопку. После команды паузы можно указать время, тогда кнопку жать необходимости нет.
Как сотворить вспышку?
Подскажите, пожалуйста. И извините, если вопрос очень тупой вышел...
Код,конечно, написать не могу(ибо тоже лошик)), но опишу как смогу.
можно создать несколько спрайтов со вспышкой, а затем изобразить их в качестве анимации(поочерёдно вписывать код, но с этим возможны проблемки. Сам не пробовал ибо фонов у меня нет и вообще то мне в новеллах пока не пригождалось)
либо взять один спрайт и с помощью zoom увеличить его в размерах, затем изменить фон.
честно, я не мастер, но такие алгоритмы вполне могут помочь.
искренне надеюсь, что хоть кто-нибудь поможет, кхм, подскажите,пожалуйста:Может ли renpy запоминать атрибуты заданные для спрайта конкретного персонажа при использовании оператора transform? Например: в процессе диалога между двумя персонажами, где они стоят в разных частях экрана.
image v1 = (images/v1.png)
image v2 = (images/v2.png)
image v3 = (images/v3.png)
label start:
transform duo_left:
xalign .25 yalign 1.0
#еще всякие настройки после которых идет jump day_1
label day_1:
show v1 with dissolve #спрайт появился по дефолту в центре
"блаблабла"
"блаблабла"
hide v1 with dissolve
#какой-то кусок где не нужен спрайт
show v2 at duo_left with dissolve
"блаблабла"
show v3 #спрайт появился поверх предыдущего, в том же местоположении
"блаблабла"
show v1 #допустим тут начинаются проблемы, когда спрайт снова появился в центре, как default
"блаблабла"
hide v1 #пропадает тот, что появился по центру, прежние остались на месте
#если же ввести hide v3 with dissolve, то останется тот спрайт - v2 -, который был под тем, который я бы скрыла
Можно ли осуществить задуманное, если я хоть как-то понятно объяснила возникающую проблему, и как можно ее решить? з: