Войти на сайт
×
ТЕМА: Animation_FX_Title
Animation_FX_Title 4 года 9 мес. назад #115262
|
Этот скрипт добавляет анимацию и слои, для создания визуальных эффектов на титульнике. Вы можете с помощью него сделать анимацию спецэффектов и так же вы можете создать анимированные кнопки. Либо поместить задний и передний фон с помощью слоев и двигать их в нужном для вас направлении. Этот скрипт будет нуждаться по кадровой анимации и простых изображениях для слоев. Так же теперь можно создавать сцены с логотипами. До показа Титульника История версий:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] Багованый код: =begin ~~~o o~~~ begin=
:...~o[ Doctor Bug's представляет ]o~...:
:...~o[ Animation_FX_Title ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
Автор: Doctor Bug
Для: RPGMAKER VX ACE
Версия: 1.3
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
:...~o[ История версий ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
2020-02-11 -> Версия 1.3
- Добавление сцен с логотипами.
2020-02-08 -> Версия 1.2
- Добавлены анимированные кнопки. Теперь анимацию можно
прикручивать к кнопкам
2020-02-07 -> Версия 1.1
- Добавлены слои, теперь можно делать двигающийся задний
фон или передний фон
2020-02-06 -> Версия 1.0
- Реализация
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
:...~o[ Описание ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
Этот скрипт добавляет анимацию и слои, для создания визуальных эффектов
на титульнике. Вы можете с помощью него сделать анимацию спецэффектов и
так же вы можете создать анимированные кнопки. Либо поместить задний и
передний фон с помощью слоев и двигать их в нужном для вас направлении.
Этот скрипт будет нуждаться по кадровой анимации и простых изображениях
для слоев. Так же теперь можно создавать сцены с логотипами.
До показа Титульника
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
:...~o[ Инструкция ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
Просто скопируйте и вставьте скрипт над Main.
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
:...~o[ Вызов скрипта ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
В этом скрипте имеются анимация, слои и анимированные кнопки.
Для анимации потребуется по кадровая анимация. Но анимация будет
автоматически превращаться в картинку если :frame_in_row и :row будут
равны 1, либо их не будет совсем. В этом случаю режим :mode автоматически
переходит в режим :hang и указывать этот параметр бессмысленно. Картинка
зависнет на первом кадре.
А слои - это картинки, которые будут повторяться на весь экран если они
меньше самого экрана, плюс их можно двигать. Кнопки завязаны на анимации.
:...~o[ Все что связанно с анимацией ]o~...:
В модуле нужно указывать обязательные (и не обязательные) параметры.
С начала разберем синтаксис. Animation – этот слова не трогаем,
это массив, туда помещается настройки каждой анимации. После символов
« = [ » на новой строчки создается блок « {} », это и будет ваша анимация,
каждый такой блок создает новую анимацию. В этом блоке указываются
параметры анимации. Слева указывается свойство, справа что оно делает.
К примеру « :x => 100 », будет помещать анимацию по оси х вправо на
100 пикселей. И да координаты самой анимации начинаются с верхнего,
левого угла. Дальше идет параметр, который обязательно нужен, но а
после можете вписывать не обязательные параметры (порядок вещей с
обязательными и не обязательными параметрами не важен). Их также пишут
через хэш ракету « => ». Обязательное свойство:
:picture – Сюда помещается название спрайт-листа (названия вашей
покадровой анимации). Также нужно указать их в кавычках. Формат
рисунка не вписывать. Всегда берется png.
Так же есть необязательные параметры, которые вы можете добавлять и
настраивать по желанию:
:frame_in_row – количество кадров в ряду анимации. По умолчанию равен 1
:row - количество самих рядов. По умолчанию равен 1
Скрипт берет спрайт-лист и вычисляет размеры кадров за счет этих параметров:
«:frame_in_row», «:row». Указывать надо точно (без отсчета с нуля)
:first_frame – первый кадр, здесь вы можете указывать откуда будет идти
анимация. По умолчанию запускается от первого кадра.
:last_frame – последний кадр, здесь вы можете указать где кончаются
анимация. Здесь также идет отсчет с 1, а не с 0. По
умолчанию запускается с первого кадра.
:x , :y – размещении анимации по х и y осям. Если их нет, то по
умолчанию берутся 0, 0
:z – Настраивает уровень глубины анимации. Поверх какой картинки
будет отображаться анимация. Первый фон заде имеет z = 0,
второй фон имеет z = 100, название игры имеет уровень z = 150,
ну и сами команды выбора имеют z = 200. По умолчанию :z анимации
имеет 50.
:mode – этот режим следит как будет проигрываться анимация.
Будет ли она циклически по кругу повторяться, либо залипнет
на последнем кадре, либо и вовсе проиграется один раз и исчезнет.
Ей присваивается один из режимов:
:loop – повторять всегда анимацию с первого кадра, когда
закончиться на последнем кадре. Иными словами,
зацикленная анимация.
:hang – анимация проиграется до последнего кадра и залипнет на нем.
Анимация застынет на последнем кадре.
:off – анимация проиграется один раз и исчезнет.
:delay – это параметр отвечающий за задержку во времени. Анимация
будет срабатывать после завершение этого числа. Каждое
обновление отнимает по числу, потому происходит задержка
быстро. Ставьте числа по больше и будет вам счастье =)
По умолчанию стоит 0
:se – добавляет звуковой эффект. [в_какой_кадр, название_файла,
громкость, тембр]. Все так же, как в редакторе, за исключение
«в_какой_кадр», здесь спрашивается, когда запустить звуковой
эффект, указываете с первого кадра или n-го кадра. Так же идет
отсчет с 1 кадра по умолчанию. На одну анимацию можно применить
один звуковой эффект.
:button - Если в анимации указан этот параметр, то эта анимация будет
анимироваться по-особому. Это означает что эта анимация
ссылается на анимированную кнопку. В таких анимации делайте
:mode либо циклическими, либо зависающие на последнем карте,
не иначе. А то будет мелькающая анимация.
:set - Если указан этот параметр, то он не будет проигрываться в
Титульнике, но будет проигрываться в Лого-Сцене.
После указание параметра и значения параметра ставиться запятая, если вам нужно
еще указать параметр. На последнем параметры анимации запятая не ставиться.
Вот не большой пример. Не пугайтесь, как привыкните к синтаксису, будет проще.
{
:picture => 'pink_number',
:frame_in_row => 9,
:row => 2,
:last_frame => 17,
:first_frame => 3,
:mode => :hang,
:speed => 10
}
Анимированные кнопки не обязательно должны иметь анимацию. Можно просто
выставить один параметр :row => 1, и простая картинка будет отображаться как
картинка, а не как анимация, подобное подойдет к любой анимации здесь.
:...~o[ Все что связанно со слоями ]o~...:
Для вызовов слоев схожая схема, только их надо заполнять в массиве «Layers».
Все также идет заполнения как в анимации, только слои имеют другие параметры.
Схожи они с анимацией только параметром :picture – которые указывают путь к
картинки и глубиной :z. И да, для слоев сделано отдельное место в корне вашей
будущей игры или проекта. По пути Graphics/Layers/. Не забудьте создать папку
Layers, в папке Graphics. Что касается параметров их не так много.
И обязательный только :picture. Остальные необязательные параметры,
которые вы можете игнорировать или записывать по желанию:
:xspeed, :yspeed – будет перемещать ваш слой по горизонтали и вертикали.
1, 1 – будет направлять слой вправо вниз. Можно
ставить отрицательные числа, тогда будет двигаться в
обратном направлении. По умолчанию стоит 0, 0
:opacity – Прозрачность картинки. Диапазон от 0 до 255. Чем меньше число,
тем прозрачнее картинка. По умолчанию стоит 255
:blend - Режим смешивания слоёв (0: обычный, 1: добавление, 2: замещение).
По умолчанию 0
:z – тоже что и в анимации, только для слоёв.
:set - Если указан этот параметр, то он не будет проигрываться в
Титульнике, но будет проигрываться в Лого-Сцене.
:...~o[ Все что связанно с кнопками ]o~...:
Чтобы анимировать ваши кнопки, нужно заполнить массив «Buttons». Они работают
за счет анимации. У них не так много параметров и в случаи чего их и вовсе
можно отключить. За это отвечает константа BUTTONS_ANIMATION. Присвойте ей
значение false и анимированные кнопки пропадут и появиться старое окно с
командами. Кстати само окно спрятана в инвизе хехе
При выборе команды, система присваивает значение переменной index. Потому
новая игра будет иметь индекс 0, а продолжение и выход соответственно 1 и 2.
На этом и завязан функционал анимированных кнопок. Так что параметры в
кнопках :index соответствуют индексам выбраных команд. Если вы в будущем
будете добавлять новые команды, то вам нужно только указать новый индекс
для анимации кнопок. Да насчет самой анимации, кнопка имеет две стадии
анимации: когда она активна (выбрана) и когда не активна (не выбрана).
По этому параметры :anim_active и :anim_no_active ссылаются на существующую
анимацию, только не забудьте указать в тех анимации параметр :button с тем же
значением. Они синхронизируются за счет этого.
:...~o[ Все что связанно с Лого ]o~...:
Теперь вы можете создавать сцены с логотипами, перед Титульником.
А также их можно пропустить или нельзя, как настроите. А можно и вовсе
отключить. Подобные сцены с логотипами вы можете создавать огромное
количество, ограничений нет. Туда могут входить только анимации и слои.
Анимированных кнопок нет, так как там не к чему привязывать их.
Создать подобную сценку очень просто. Для этого вам нужно указать
значение в массиве Sets, а после прописать параметр в анимации или в
слоях :set => значение. Массив Sets по очередности обрабатывается и
берет первое значение, а затем последующие.
К примеру Sets = [1, 2]
В анимации
:set => 1,
В слои
:set => 2,
То в первом лого-сцене будет проиграна анимация, а во втором слой.
У лого-сцене есть ограниченная продолжительность. TIMER = [200, 60, 60]
Первое значение отвечает за продолжительность сцены. Второе и третье
значение отвечает за проявление анимации и исчезновение её. На слои не
распространяется.
LOGO – отвечает за появление логотипа. Если false – то лого-сцен не будет
NO_SKIP_LOGO – отвечает за отмену пропускание логотипа. Если true – то
пропустить Логотип нельзя.
F12 - не перезапускает логотип
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
:...~o[ Требование ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
Данный скрипт можно использовать в бесплатных проектах, если указано моё
авторство (Doctor Bug) на данный скрипт.
Для коммерции свяжитесь со мной. Ищите в русскоязычных сообществах по
RPG Maker. Либо по почте [email protected]
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
:...~o[ Пару слов ]o~...:
#~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~
Скрипт скорее всего будет конфликтовать с другими скриптами связанные с
Титульником. Так что старайтесь связаться со мной, я попробую совместить
или добавить схожий функционал. Так же сообщайте по почте если найдете моих
сородичей, багов. Буду премного благодарен. Для анимации используйте
рисунки формата PNG. Разбитые по кадрам, главное, чтобы сами кадры имели
одинаковые размеры. Не важно какой ширины или длины. Будь то квадратные или
прямоугольные, главное, чтобы последующие кадры имели такие же размеры.
Анимацию помещайте по пути в папку /Graphics/Animations. Если вы захотите
расширить команды новыми командами, вам все равно придется лезть в скрипты.
Но в любом случаи анимированные кнопки завязаны только на @command_window.index
если выбрана одна кнопка, то остальные автоматически становятся не активными и
проигрывают соответствующую анимацию. Слои помещайте по пути в папку
Graphics/Layers.Модуль с анимацией (module Animation_FX_Title) можно вынести в
отдельную ячейку средь других скриптов, главное чтобы выше тела самого скрипта,
для удобства.
Надеюсь, вам понравиться скрипт в эксплуатации.
Приятного времяпровождения в игрострое ▪_■
=end # ~~~o o~~~ # end=
($imported ||= {})["Animation_FX_Title"] = true
module Animation_FX_Title
LOGO = true
NO_SKIP_LOGO = false
BUTTONS_ANIMATION = true
TIMER = [200, 60, 60]
Sets = [1, '2']
Buttons = [
{
:index => 0,
:anim_active => "NewGame_active",
:anim_no_active => "NewGame",
},
{
:index => 1,
:anim_active => "ContinueGame_active",
:anim_no_active => "ContinueGame",
},
{
:index => 2,
:anim_active => "exit_active",
:anim_no_active => "exit",
}
]
Layers = [
{
:picture => 'Rain',
:xspeed => 1.5,
:yspeed => -3,
:opacity => 50, #(0-255)
:blend => 1,
:z => 100
},
{
:picture => 'Break_Paralax',
:xspeed => 2,
:yspeed => 0,
:opacity => 50, #(0-255)
:blend => 1,
:set => 1,
:z => 0
}
]
Animation = [
{
:picture => 'title_text_steam_2',
:speed => 3,
:z => 100,
},
{
:picture => 'logo_1',
:frame_in_row => 5,
:row => 2,
:x => 100,
:y => 100,
:speed => 2,
:mode => :loop,
:last_frame => 9,
:z => 200,
:set => 1,
},
{
:picture => 'logo_2',
:x => 130,
:y => 100,
:speed => 2,
:mode => :loop,
:z => 200,
:set => '2',
},
{
:picture => 'Boom2',
:frame_in_row => 8,
:row => 6,
:x => 180,
:y => 150,
:speed => 3,
:mode => :off,
:last_frame => 48,
:first_frame => 1,
:se => [1,'Explosion5',70,100],
:set => '2',
:z => 50
},
{
:picture => 'heart',
:frame_in_row => 5,
:row => 3,
:x => -70,
:y => -50,
:speed => 3,
:mode => :loop,
:last_frame => 14,
#:first_frame => 1,
:z => 50
},
{
:picture => 'sonic_who',
:frame_in_row => 10,
:row => 5,
:speed => 3,
:mode => :loop,
:last_frame => 50,
:first_frame => 1,
:delay => 100,
:se => [40,'Fire5',50,100],
:z => 201,
:set => 1
},
# :...~o[ Buttons animation ]o~...:
{
:picture => 'new_game_steam_active',
:frame_in_row => 5,
:row => 2,
:button => 'NewGame_active',
:speed => 6,
:mode => :loop,
:x => 255,
:y => 250,
:last_frame => 7,
:first_frame => 1,
:z => 201
},
{
:picture => 'new_game_steam_no_active',
:frame_in_row => 5,
:row => 2,
:button => 'NewGame',
:speed => 3,
:mode => :loop,
:x => 300,
:y => 250,
:last_frame => 7,
:first_frame => 1,
:z => 201
},
{
:picture => 'continue_steam_active',
:frame_in_row => 5,
:row => 2,
:button => 'ContinueGame_active',
:speed => 3,
:mode => :loop,
:x => 250,
:y => 300,
:last_frame => 7,
:first_frame => 1,
:z => 201
},
{
:picture => 'continue_steam_no_active',
:frame_in_row => 5,
:row => 2,
:button => 'ContinueGame',
:speed => 3,
:mode => :loop,
:x => 300,
:y => 300,
:last_frame => 7,
:first_frame => 1,
:z => 201
},
{
:picture => 'exit_steam_active',
:frame_in_row => 5,
:row => 2,
:button => 'exit_active',
:speed => 3,
:mode => :loop,
:x => 260,
:y => 350,
:last_frame => 7,
:first_frame => 1,
:z => 201
},
{
:picture => 'exit_steam_no_active',
:frame_in_row => 5,
:row => 2,
:button => 'exit',
:speed => 3,
:mode => :loop,
:x => 350,
:y => 350,
:last_frame => 7,
:first_frame => 1,
:z => 201
},
]
class << self
def enable_logo
@logo_launched = true
end
def turn_off_logo
@logo_launched = false
end
def logo_launched
return @logo_launched
end
end
end
module Cache
def self.layers(filename)
load_bitmap("Graphics/Layers/", filename)
end
end # Cache
class Logo
attr_accessor :set_switch
def initialize
@sets = Animation_FX_Title::Sets
@set = @sets.shift
@timer = Animation_FX_Title::TIMER.clone
@stage = 0
create_objects
end
def create_objects
@anim_logo = []
@layers_logo = []
Animation_FX_Title::Animation.each do |param|
if param[:set] == @set
@anim_logo.push(Animation_Title.new(@viewport, param))
end
end
Animation_FX_Title::Layers.each do |param|
if param[:set] == @set
@layers_logo.push(Layer_Title.new(@viewport, param))
end
end
hide_instantly
end
def update
update_animation_title
update_layers_title
update_timer
end
def update_animation_title
@anim_logo.each do |anim|
anim.update
end
end
def update_layers_title
@layers_logo.each {|layer| layer.update}
end
def update_timer
case @stage
when 0
reveal_objects
when 1
if @timer[0] <= 0
@stage = 2
@timer[0] = Animation_FX_Title::TIMER[0]
end
@timer[0] -= 1
when 2
hide_objects
end
end
def reveal_objects
if @timer[1] <= 0
@stage = 1
@timer[1] = Animation_FX_Title::TIMER[1]
detect_instantly
end
discover
@timer[1] -= 1
end
def hide_objects
if @timer[2] <= 0
unless @sets.empty?
refresh_logo
@stage = 0
@timer[2] = Animation_FX_Title::TIMER[2]
else
Animation_FX_Title.turn_off_logo
end
end
hide
@timer[2] -= 1
end
def discover
@anim_logo.each {|anim| anim.opacity += 5}
end
def detect_instantly
@anim_logo.each {|anim| anim.opacity = 255}
end
def hide
@anim_logo.each {|anim| anim.opacity -= 5}
end
def hide_instantly
@anim_logo.each {|anim| anim.opacity = 0}
end
def refresh_logo
dispose
@set = @sets.shift
create_objects
end
def skip
return true if Animation_FX_Title::NO_SKIP_LOGO
if Input.press?(:C) or Input.press?(:B)
return false
end
return true
end
def dispose
dispose_animation
dispose_layers
end
def dispose_animation
@anim_logo.each {|anim| anim.dispose}
@anim_logo = []
end
def dispose_layers
@layers_logo.each {|layer| layer.dispose}
@layers_logo = []
end
end
class Scene_Title < Scene_Base
alias logo_main main
def main
if Animation_FX_Title::LOGO == true
logo_start
end
logo_main
end
def logo_start
Graphics.transition(transition_speed)
logo = Logo.new
while Animation_FX_Title.logo_launched.nil?
Input.update
logo.update
Animation_FX_Title.turn_off_logo unless logo.skip
Graphics.update
end
logo.dispose
end
def start
super
SceneManager.clear
Graphics.freeze
create_background
create_foreground
create_animation
create_layers
create_command_window
create_buttons
adjustment
play_title_music
end
def adjustment
@sprite1.viewport = @viewport
@sprite2.viewport = @viewport
@sprite1.z = 0
@sprite2.z = 100
@foreground_sprite.z = 150
@command_window.viewport = @viewport
if Animation_FX_Title::BUTTONS_ANIMATION
@command_window.visible = false
else
@command_window.visible = true
@command_window.z = 200
end
end
def create_animation
@anim_title = []
Animation_FX_Title::Animation.each do |param|
if param[:set].nil?
@anim_title.push(Animation_Title.new(@viewport, param))
end
end
end
def create_layers
@layers_title = []
Animation_FX_Title::Layers.each do |param|
@layers_title.push(Layer_Title.new(@viewport, param))
end
end
def create_buttons
@buttons_title = []
Animation_FX_Title::Buttons.each do |param|
@buttons_title.push(Button_Title.new(param))
end
@buttons_title.each do |button|
button.switch = false
if button.index == @command_window.index
button.switch = true
end
end
end
def update
super
update_buttons if Animation_FX_Title::BUTTONS_ANIMATION
update_animation_title
update_layers_title
end
def update_animation_title
@anim_title.each do |anim|
if anim.button.empty?
anim.update
end
return unless Animation_FX_Title::BUTTONS_ANIMATION
unless anim.button.empty?
@buttons_title.each do |button|
if button.switch
if anim.button == button.anim_active
anim.visible = true
anim.update
end
if anim.button == button.anim_no_active
anim.visible = false
end
else
if anim.button == button.anim_active
anim.visible = false
end
if anim.button == button.anim_no_active
anim.visible = true
anim.update
end
end
end
end
end
end
def update_layers_title
@layers_title.each {|layer| layer.update}
end
def update_buttons
@buttons_title.each do |button|
button.switch = false
if button.index == @command_window.index
button.switch = true
end
end
end
def terminate
super
SceneManager.snapshot_for_background
dispose_background
dispose_foreground
dispose_animation
dispose_layers
end
def dispose_animation
@anim_title.each {|anim| anim.dispose}
@anim_title = []
end
def dispose_layers
@layers_title.each {|layer| layer.dispose}
@layers_title = []
end
end
class Button_Title
attr_reader :anim_active
attr_reader :anim_no_active
attr_accessor :index
attr_accessor :switch
def initialize(data)
@index = data[:index]
@anim_active = data[:anim_active]
@anim_no_active = data[:anim_no_active]
@switch = nil
end
end
class Sound_Title
def initialize(data)
end
end
class Layer_Title < Plane
def initialize(viewport, data)
super(viewport)
@picture = data[:picture]
self.z = data[:z] ? data[:z] : 0
@xspeed = data[:xspeed] ? data[:xspeed] : 0
@yspeed = data[:yspeed] ? data[:yspeed] : 0
self.opacity = data[:opacity] ? data[:opacity] : 255
self.blend_type = data[:blend] ? data[:blend] : 0
@movex = 0
@movey = 0
end
def update
self.bitmap = Cache.layers(@picture)
self.ox = @movex
self.oy = @movey
@movex += @xspeed
@movey += @yspeed
@movex = 0 if @movex >= self.bitmap.width
@movey = 0 if @movey >= self.bitmap.height
end
def dispose
bitmap.dispose if bitmap
super
end
end
class Animation_Title < Sprite
attr_reader :button
attr_accessor :switch
def initialize(viewport, data)
super(viewport)
@frame_in_row = data[:frame_in_row] ? data[:frame_in_row] : 1
@row = data[:row] ? data[:row] : 1
@picture = data[:picture]
@last_frame = data[:last_frame] ? data[:last_frame] - 1 : 0
@first_frame = data[:first_frame] ? data[:first_frame] - 1 : 0
self.x = data[:x] ? data[:x] : 0
self.y = data[:y] ? data[:y] : 0
@loop = data[:loop] ? data[:loop] : false
unless @loop
@hang = data[:hang] ? data[:hang] : false
end
@mode = data[:mode] ? data[:mode] : :off
@mode = :hang if @frame_in_row == 1 and @row == 1
@speed = data[:speed] ? data[:speed] : 20
@delay = data[:delay] ? data[:delay] : 0
@wait = @delay
self.visible = @wait > 0 ? false : true
@duration = 0
self.z = data[:z] ? data[:z] : 50
if data[:se]
@se = data[:se]
end
@current_index = @first_frame
@button = data[:button] ? data[:button] : ''
@switch = nil
end
def dispose
bitmap.dispose if bitmap
super
end
def update
super
update_bitmap
update_anim
end
def update_bitmap
self.bitmap = Cache.animation(@picture,0)
return if @frame_in_row == 1 && @row == 1
sx = (@current_index % @frame_in_row) * image_width
sy = (@current_index / @frame_in_row) * image_height
self.src_rect.set(sx, sy, image_width, image_height)
end
def image_width
width = self.bitmap.width / @frame_in_row
return width
end
def image_height
if @row > 1
height = self.bitmap.height / @row
return height
else
height = self.bitmap.height
return height
end
end
def update_anim
if @wait > 0
@wait -= 1
self.visible = false
return
end
@duration += 1
if @current_index == @last_frame
if @mode == :loop && @duration > @speed
@current_index = @first_frame
@wait = @delay
@duration = 0
elsif @mode == :hang && @duration > @speed
@current_index = @last_frame
elsif @mode == :off && @duration > @speed
self.visible = false
@duration = 0
end
else
if @duration > @speed
if @se
if @current_index == @se[0] - 1
RPG::SE.new(@se[1],@se[2],@se[3]).play
end
end
if @current_index == @first_frame
self.visible = true
end
@current_index += 1
@duration = 0
end
end
end
end ссылка на демку: Тутц |
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 4 года 9 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.
|
Animation_FX_Title 4 года 9 мес. назад #115270
|
Добавлены слои для заднего или переднего фона. Версия 1.1
|
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol
|
Animation_FX_Title 4 года 9 мес. назад #115272
|
молодца,очень круто!
еще б круче если бы гифку сделал. многие мне кажется как ее увидят так не удержатся и скачают =З "o~~~o~~~o~~~o~~~o~~~" - это в руби так принято? или отсебятина? глаза вытекли пока справку дочитал |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Doctor_Bug
|
Animation_FX_Title 4 года 9 мес. назад #115273
|
Теперь скрипт позволяет сделать анимированные кнопки. Версия 1.2
Я добавил гифку )) |
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: ZX_Lost_Soul, yuryol
|
Animation_FX_Title 4 года 9 мес. назад #115283
|
Теперь можно создавать логотипы и впихивать в игру. Версия 1.3
|
Баг изучает Godot Engine. А слушает эту музыку ~~> Мое сердце
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: ZX_Lost_Soul
|
Модераторы: NeKotZima
Время создания страницы: 0.262 секунд