Картинка в картинке - вид на другую карту

3 место Готв Учитель 2 место
Больше
11 года 6 мес. назад - 11 года 6 мес. назад #74770 от EvilCat
Картинка в картинке [VX Ace]

Информация:

Автор: EvilCat
Версия мейкера: VX ACE.
Тип: Новый элемент

Описание:
Пока игрок ходит по карте, он может видеть события другой карты в небольшом прямоугольнике. События другой карты также работают - персонажи ходят, меняются в соответствии с переключателями, выполняют команды... Можно применять в различных механиках, когда стоишь в одном месте и влияешь на события совершенно в другом (или подсматриваешь).

Особенности:
- Вид включается и отключается кнопкой F5
- При переходе между локациями сохраняется состояние видимости вида, а в битвах и меню он скрывается.

Установка:
1. Добавить в список скриптов новую страницу с названием PiP и кодом, находящимся под спойлером.
2. К сожалению, чтобы научить Мейкер обрабатывать две карты сразу, необходимо было перевести несколько стандартных классов и модулей с глобальной переменной $game_map на локальную @game_map, содержащую контекстную карту, а также изменить некоторые методы, чтобы они работали с ограниченной областью, а не всем экраном сразу. Поэтому следует также заменить содержимое нескольких стандартных страниц с кодом в соответствии со спойлерами ниже.
3. Необязательная настройка.
3.1. В строчках №№ 62-63 страницы "PiP" находятся настройки числа фреймов для появления и отключения дополнительного интерфейса и адрес графического файла, использующегося в качестве интерфейса.
3.2. В строчках №№ 65-69 той же страницы находятся параметры прямоугольной области, выделенной под вид на другую карту.
3.3. В строчке № 71 находится изначальное состояние интерфейса: видим или скрыт; а в строчек № 72 - код кнопки, которая переключает.
4. Готово!

Код:
страница PiP


страница Game_Map


(остальные страницы см. в следующих сообщениях)

Что хотелось бы улучшить:
Что хотелось бы сделать, но сейчас нет времени, так что помочь принимается:
- Удобство использования с другими скриптами, например, не константные значения файла интерфейса и субкарты.
- Перемещение вида в другой угол экрана, если персонаж оказывается под ним и перестаёт быть виден.
- Возможность нескольких разных видов одновременно и по отдельности.
- Возможность отключить обработку карты в виде, чтобы её события не действовали, пока не видны (или пока не нужно, чтобы они действовали).
- Лучшая презентация: огонь явно не подходит как пример рамки интерфейса %)
- Более адекватное скрывание вида в бою.
- Возможность, чтобы вид не скрывался в бою и на других экранах.
- Возможность убрать отключение-включение вида по кнопки.
- Возможность управляемому персонажу находиться на субкарте, а также правильно показывать на субкарте другие действия (транспорт, ходящая гуськом партия).

Что хотелось бы сделать, но скорее всего невозможно:
- Такое же постепенное появление Вьюпорта с видом, как и появление интерфейса. Но похоже, что Вьюпорты не поддерживают прозрачность.
- Чтобы все скрипты дополнения были на одной компактной страницы, а не нуждались в замене стандартных страниц. Но, кажется, необходимые изменения в них слишком точечные и разбросанные, чтобы это было возможно.
Последнее редактирование: 11 года 6 мес. назад пользователем EvilCat.
Спасибо сказали: Dmy, DeadElf79, Ren310, Jas6666, MaltonTheWarrior, zmeelov66, KageDesu

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 6 мес. назад - 11 года 6 мес. назад #74771 от EvilCat
страница Game_CharacterBase


страница Game_Character


страница Game_Vehicle


страница Game_Event
Последнее редактирование: 11 года 6 мес. назад пользователем EvilCat.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 6 мес. назад #74772 от EvilCat
страница Spriteset_Map

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 6 мес. назад #74786 от Cerberus
Собственно, один вопрос: зачем заменять имеющиеся страницы, если можно всё это добавлять в материалы? А так - спасибо, поизучаем :)

Жуть болотная, на лапках, в тапках и с пулемётом...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 6 мес. назад #74789 от EvilCat
Оформить так было бы здорово (это одно из пожеланий), но не представляется возможным :\ Допустим, в Game_CharacterBase тридцать-сорок отсылок к $game_map в самых разных методах. Большая часть была заменена на @game_map. Чтобы сделать это не заменой страницы кода, а дополнением, пришлось бы, во-первых, переопределить больше половины методов, во-вторых, эти переопределённые методы будут просто копиями с парой заменённых символов. Разница с заменой оригинальной кодовой страницы получается очень невелика.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 6 мес. назад #74792 от Cerberus
Если помнить, что заменял, то да. Если скрипт предназначен для "чайников" - лучше даже небольшие изменения выносить отдельно, чтобы они были очевидны, иначе потом будет много вопросов, с чем там что-то конфликтует.

Жуть болотная, на лапках, в тапках и с пулемётом...
Спасибо сказали: DeadElf79, yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 6 мес. назад #74800 от EvilCat
Представляю себе такой случай. Допустим, будет страница с кодом Game_BaseCharacter_EvilCat, где в классе Game_BaseCharacter будут переопределены 30 методов, внутри которых будет копипаста из оригинального класса, только с заменой $game_map на @game_map. По другому, с alias'ами, не получится, потому что не добавлены дополнительные действия, а только изменены отдельные строчки.

В таком случае эти файлы, содержащие в принципе копипасту половины оригинального кода с мелкими изменениями, необходимо размещать до всех других скриптов, поскольку если какой-нибудь скрипт сделает "alias :стандартный_метод :моя_копия_стандартного_метода", а в его новом стандартном_методе сделать "super; что-то от себя", а потом Game_BaseCharacter_EvilCat тупо переопределит стандартный_метод, то функционал того скрипта перестанет работать.

Кроме того, при отладке написания скриптов в присутствии такого дублирования могут возникнуть трудности с тем, куда смотреть: в Game_BaseCharacter или в Game_BaseCharacter_EvilCat, потому что придётся помнить, которые методы были перегружены в последнем.

Мне кажется, легче просто заменить оригинальные классы.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 6 мес. назад #74801 от Cerberus
"Копипасту половины оригинального кода" можно и нужно запихнуть в некий аналог "ядра", во-первых. А насчёт "отладки" - господи, Ctrl+Shift+F вам в помощь :)

Жуть болотная, на лапках, в тапках и с пулемётом...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 6 мес. назад #74802 от EvilCat

"Копипасту половины оригинального кода" можно и нужно запихнуть в некий аналог "ядра"


Научи, пожалуйста.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 6 мес. назад #74804 от Cerberus
Я имею в виду - ту часть кода, которая должна быть выше всех, есть смысл выделять в отдельный блок с пометкой "ставить выше всех". Тогда как раз вопрос с конфликтами будет решаться максимально быстро.

Жуть болотная, на лапках, в тапках и с пулемётом...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 6 мес. назад #74805 от DeadElf79
EvilCat, можешь посмотреть на то, как реализовано все хотя у этого парня:
victorscripts.wordpress.com/rpg-maker-vx-ace/ (скрипты отдельно, базовый модуль - отдельно, но требуется для работы).
Разберешься с этим - натолкнет на правильные мысли в нужном направлении ^_^

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Учитель Даритель Стимкея 3 место
Больше
11 года 4 мес. назад #76992 от Jas6666
EvilCat работа над скриптом продолжается или это уже полностью готовый вариант?
Можно узнать )
-как изменить размеры окна ?
-как поместить окно в другой угол ?
-можно ли чтобы окно отслеживало определённый евент и передвигало изображение в окне за ним ?
-можно ли включить окно через переменные или переключатели и также его выключить?
-есть ли возможность включить несколько окон одновременно ))?
-как сделать чтобы в окне отображался главный герой если он стоит в том месте где в окне отображается изображение ?
-можно ли чтобы окно переключалась на определённые евенты (скажем я нажал на кнопку и в окне показывается как где то открылась дверь потом я нажал на другую кнопку и в окне показывается уже другое изображение но дверь в предыдущем месте остаётся открытой )
-возможно сделать чтобы изображение в окне переключалось по нажатию кнопки на клавиатуре или по выбору из меню?
- как сделать чтобы в окне отображался не верхней левый угол а другое место на карте?
- как заменить фон с огнём или убрать его ?
- возможно ли менять фон переменными или переключателями?
Слишком много хочу :laugh:
Большое спасибо за скрипт !!!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 4 мес. назад #76993 от EvilCat

Jas6666 пишет: EvilCat работа над скриптом продолжается или это уже полностью готовый вариант?


Увы, с моей стороны не продолжается - я сделала и залила много обновлений для браузерки, в которой участвую, а вот на Мейкер времени не хватило -_- Сейчас постараюсь вспомнить ответы на твои вопросы %)

-как изменить размеры окна ?
-как поместить окно в другой угол ?


На странице "PiP" скриптов есть такие строчки:
SUBVIEW_X=10
SUBVIEW_Y=10
SUBVIEW_WIDTH=200
SUBVIEW_HEIGHT=200

Первые два параметра - координаты левого верхнего угла окна, а вторые два - его ширина и высота.

-можно ли чтобы окно отслеживало определённый евент и передвигало изображение в окне за ним ?
- как сделать чтобы в окне отображался не верхней левый угол а другое место на карте?

Об этом я не подумала... Кажется, сейчас окно показывает строго левый верхний угол. Сейчас я не могу сесть и разобраться, так что вопрос к знатокам, как двигать камеру скриптами независимо от персонажа? %)

-можно ли включить окно через переменные или переключатели и также его выключить?

Объект окна предусматривает методы toggle (переключение видимости), set_visible (сделать показываемым) и set_invisible (сделать невидимым). В событиях можно использовать команду Script, которая задействует эти методы. Если я не ошибаюсь, написать нужно просто PiPHud.toggle (или другой нужный метод).

-есть ли возможность включить несколько окон одновременно ))?

Не в данной версии скрипта, но технически ограничений нет - если кто-то поможет с доработкой кода, это будет возможным %)

-как сделать чтобы в окне отображался главный герой если он стоит в том месте где в окне отображается изображение ?

Увы, это тоже требует серьёзной доработки кода.

-можно ли чтобы окно переключалась на определённые евенты (скажем я нажал на кнопку и в окне показывается как где то открылась дверь потом я нажал на другую кнопку и в окне показывается уже другое изображение но дверь в предыдущем месте остаётся открытой )

Если подойдут знатоки и скажут, как именно задавать координаты камеры, это можно будет сделать легко %) Что касается открытых дверей, то это вообще исключительно вопрос переменных и триггеров - видимость двери в окне никак не помогает и не мешает ей быть открытой в соответствии с триггерами.

-возможно сделать чтобы изображение в окне переключалось по нажатию кнопки на клавиатуре или по выбору из меню?

Насчёт выбора в меню не знаю, как у тебя устроены меню... Но что касается кнопок, то в коде PiP есть такое место:

def self.update
toggle if Input.trigger?(TOGGLE_KEY)
refresh
@submap.update(true)
@submap_view.update
end

...а TOGGLE_KEY задана сверху как:

TOGGLE_KEY=:F5

Можно сделать различные реакции и на другие кнопки, типа:

<какой_нибудь_метод> if Input.trigger?(:F10)

- как заменить фон с огнём или убрать его ?

Спрайт с огнём задан здесь:
HUD_FILE='Graphics/Titles2/Fire'

Можно указать другой файл. В данной версии скрипта я не предусмотрела отсутствия спрайта -_-

- возможно ли менять фон переменными или переключателями?

Сейчас подобного не предусмотрено, но скорее всего его можно менять простой скриптовой командой:

PiPHud.expose_sprite.bitmap=Bitmap.new('<адрес файла>')

Если перед этим добавить в модуль PiPHud:

def expose_sprite
@sprite
end

Слишком много хочу :laugh:
Большое спасибо за скрипт !!!


Рада, если хотя бы чем-то он поможет! %) И ты всё правильно хочешь. С такой механикой можно много интересного сделать, жаль только, что времени в сутках так мало -_-
Спасибо сказали: Jas6666

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Учитель Даритель Стимкея 3 место
Больше
11 года 4 мес. назад #76999 от Jas6666
EvilCat почему бы тебе не попросить помощи на этом форуме в помощи и на форуме нейтральной полосы,
с этим скриптом можно такое наворотить в создании игр даже сейчас ))) а что можно будет когда он будет со всякими примочками :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 4 мес. назад #77000 от EvilCat
Я уже попросила помощи на IRC-канале... Каюсь, я гейм-дизайнер больше, чем программист, так что если без меня скрипт доведут до ума, я не расстроюсь, а обрадуюсь %)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 3 мес. назад - 11 года 3 мес. назад #77728 от Arykray
Интересный скрипт, как волшебное зеркало которое позволяет наблюдать за другими мирами.

Пару небольших замечаний:
лучше все это дело при старте игры сделать отключенным, запустил не создав вторую карту получил от мейкера ошибку, по умолчанию как раз таки INITIALLY_VISIBLE=true.
Размеры окна советую делать кратные 32, для определенного количества тайлов.

Персонаж в окне вообще не отображается (можно и текущую карту туда засунуть).
Нужна прозрачность окошка.
Есть вариант: сделать как игровой экран только с размерами не 580 × 444 а меньше.
Было бы забавно переключатся между экранами расширяя на весь экран свернутый и сворачивая текущий)))
Можно еще для рыбалки скрипт использовать смотреть когда рыба подплывает и подсекать)))
Или для камеры слежения, если стелс игра.

Все заносить начинает, значит спать пора!

Покопаюсь на досуге, может чего и получится!

Чем сложнее задача - тем проще ее не решать.

[img
Последнее редактирование: 11 года 3 мес. назад пользователем Arykray.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
11 года 3 мес. назад - 11 года 3 мес. назад #77974 от DK
Гляньте эту версию: Яндекс


Удалил огненное оформление, добавил возможность вызывать нужную карту через скрипты в эвентах - используйте change_pip_map(id)

Вроде работает...
Последнее редактирование: 11 года 3 мес. назад пользователем DK. Причина: забыл ссылку :)
Спасибо сказали: MaltonTheWarrior, EvilCat

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 3 мес. назад #77979 от EvilCat
Спасибо огромное за доработку! %)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.145 секунд
Работает на Kunena форум