Спасибо Весёлому Роджеру за полезную ссылку! Она пригодится для тех, кто хочет сделать двери в RPG Maker VX Ace и MV.
Хочу немного дополнить и описать, как сделать переход не по дверям RPG Maker XP (судя по значку этой темы, Oltal использует его).
_______________
1. События перехода
Если нужен переход по нескольким клеткам, можно сделать событие перехода, в котором только одна команда — Переместить игрока. Это такое прозрачное событие, которое будет выполняться при наступлении на клетку перехода.
Проект-пример событий перехода для RPG Maker XP: TransferEvent.zip (~200 Кб)
В новых версиях RPG Maker (VX Ace и MV) есть готовые шаблоны для событий перехода, но в RPG Maker XP их надо делать вручную. К счастью, это легко.
Чтобы поставить событие, нужно перейти в режим редактирования событий (нажать на значок с кубиком на панели инструментов или F8) и щёлкнуть по той клетке, где будет переход.
Откроется окно редактирования событий. В нём в левой части нужно выбрать переход по касанию:
В правой стороне нужно добавить команду события «Переместить игрока», которая будет перемещать игрока на другую карту, когда игрок касается события:
Если непонятно, гляньте в
проекте-примере.
________________
2. Переход по параллельному событию
Но если нужно, чтобы
весь край карты действовал как переход на другую карту, то можно делать паралелльное событие. Это немного сложно, поэтому стоит сначала попробовать с событиями перехода.
Проект-пример переноса с параллельными событиями для RPG Maker XP: ParallelEventMovement.zip (~200 Кб)
Параллельное событие — это такое событие, команды которого выполняются постоянно в фоновом режиме. При этом оно не мешает игроку двигаться, что-то делать, взаимодействовать с другими событиями и так далее. (Правда, есть исключения: если в параллельном событии показывать сообщения, то они будут мешать двигаться.)
В RPG Maker XP параллельное событие создаётся так:
В этом параллельном событии нужно сделать переход на другую карту с заданными координатами. У всех клеток карты есть координаты X и Y:
- Координата X — это расстояние от самой левой клетки до текущей. То есть у самой левой клетки координата X=0; у самой правой равна (ширина карты - 1).
- Координата Y — это расстояние от самой верхней клетки до текущей. То есть у самой верхней клетки координата Y=0, у самой нижней — (высота карты - 1).
Узнать координаты какой-то конкретной клетки можно в строке состояния внизу. В режиме рисования карты она показывает координаты клетки, над которой находится курсор мыши. В режиме редактирования ивентов она показывает координаты выделенной клетки.
Координаты показываются через запятую: сначала X, потом Y:
(На этом примере правая клетка дупла расположена по координатам X=10, Y=9).
Координаты игрока игрока можно сохранить в переменную с помощью команды «Переменная». Переменная — это такая штука, которая может хранить число. Можно создать сколько угодно переменных. Нам понадобятся как минимум три: для координаты X, для координаты Y и для нового номера карты.
С помощью команды «Переменная...» можно сохранить координату X и координату Y в переменные. (Только нужно выбрать для них разные переменные — иначе одна команда перепишет другую! Переменным можно давать названия, когда их выбираешь, лучше выбрать разные переменные и дать им названия, чтобы не перепутать.) Вот как сохранить координату X и Y:
(Важно: нужно выбирать именно X и Y карты — расстояние в клетках от края карты. Есть ещё X и Y экрана — это расстояние в пикселях от края экрана до места героя на экране, это нам не нужно.)
Эти команды нужно записать в параллельное событие, чтобы они выполнялись постоянно в фоновом режиме:
@>
ПЕРЕМЕННАЯ: [0001:Координата X] = Игрок X на карте
@>
ПЕРЕМЕННАЯ: [0002:Координата Y] = Игрок Y на карте
Когда мы сохранили место игрока в переменной, можно проверить, находится ли он на координатах, где ему нужно переходить на другую карту:
- переход налево: если координата X = 0,
- переход направо: если координата X = ширина карты минус 1 (т.е. если карта шириной в 20 клеток, то переход направо, если X=19),
- переход вверх: если координата Y = 0,
- переход вниз: если координата Y = высота карты минус 1 (т.е. если карта высотой в 15 клеток, то переход направо, если X=14).
Проверку тоже нужно добавить в параллельное событие под сохранением координат. Проверка делается с помощью команды «Ветвление условий». Например, у меня карта шириной в 20 клеток, и я делаю переход вправо, поэтому проверяю, что переменная с координатой X равна 19:
После добавления такой проверки код примет такой вид:
@>
ПЕРЕМЕННАЯ: [0001:Координата X] = Игрок X на карте
@>
ПЕРЕМЕННАЯ: [0002:Координата Y] = Игрок Y на карте
@>
Ветвление условий: Переменная [0001:Координата X] == 19
@>
:
КОНЕЦ
@>
Между командами «
Ветвление условий» и «
КОНЕЦ» можно писать код, который выполниться, только если условие правильное. В нашем случае — код перехода на новую карту. Следующие команды мы будем включать между «
Ветвление условий» и «
КОНЕЦ».
Но тут есть загвоздка: если игрок перешёл на эту клетку с другой карты, то он тоже будет на этой клетке и переход тоже случиться. Лучше добавить проверку на направление игрока: пусть переход на правую карту случается только когда игрок смотрит вправо.
Для этого тоже используется «Ветвление условий», но с другой проверкой:
Код примет такой вид:
@>
ПЕРЕМЕННАЯ: [0001:Координата X] = Игрок X на карте
@>
ПЕРЕМЕННАЯ: [0002:Координата Y] = Игрок Y на карте
@>
Ветвление условий: Переменная [0001:Координата X] == 19
@>
Ветвление условий: Игрок + смотрит вправо
@>
:
КОНЕЦ
@>
:
КОНЕЦ
@>
Код перехода будет между двумя ветвлениями условий: чтобы переход вызывался, только когда игрок стоит на нужной клетке и смотрит в нужную сторону.
Для перехода может использоваться команда «Переместить игрока». В ней есть опция перехода по переменным:
Но! Чтобы ей воспользоваться, нам нужно установить переменные для новой карты.
Во-первых придётся создать новую переменную «ID карты» и записать в неё ID-номер карты. Чтобы его узнать, можно открыть нужную карту в редакторе и посмотреть на число слева от координат. Там будет что-то типа «002:Название карты» (вместо 002 — своё число, вместо Название карты — ваше название карты). Вот 002 и будет ID-номером карты.
Его надо записать в переменную с помощью команды «Переменные»:
Аналогично нужно установить координаты. Если карты равного размера и не нужны никакие хитрые смещения, они устанавливаются так:
- переход налево: координата X устанавливается ширине левой карты - 1, координата Y не меняется,
- переход направо: координата X устанавливается равной 0, координата Y не меняется,
- переход вверх: координата X не меняется, координата Y устанавливается высоте верхней карты - 1,
- переход вниз: координата X не меняется, координата Y устанавливается равной 0.
То есть нужно добавить ещё команду «Переменные» и установить координату X (при переходе направо или налево) и координату Y (при переходе вверх или вниз) равной нужному значению.
В итоге получится вот такое событие (для перехода вправо):
@>
ПЕРЕМЕННАЯ: [0001:Координата X] = Игрок X на карте
@>
ПЕРЕМЕННАЯ: [0002:Координата Y] = Игрок Y на карте
@>
Ветвление условий: Переменная [0001:Координата X] == 19
@>
Ветвление условий: Игрок + смотрит вправо
@>
ПЕРЕМЕННАЯ: [0003:ID карты] == 2
@>
ПЕРЕМЕННАЯ: [0002:Координата Y] == 0
@>
Переместить игрока:из переменных [0003][0001][0002]
@>
:
КОНЕЦ
@>
:
КОНЕЦ
@>
В результате игрок будет переходить по любой клетке на краю карты.
Если это сложно — не волнуйтесь! Вы можете использовать первый способ и просто заставить всю правую часть карты событиями перехода вместо параллельного события. Это медленнее, но проще для понимания. Способ с параллельными событиями сложный, и если вы его не понимаете, это не страшно.
А если все-таки решите разбираться с параллельными событиями, посмотрите на
проект-пример.
_______________
Если будут вопросы, спрашивайте!