Войти на сайт

Авторизация, ждите ...
×

ТЕМА: [RMXP] Титульное меню на эвентах

[RMXP] Титульное меню на эвентах 15 года 5 мес. назад #23997

  • Барманк
  • Барманк аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 1
Титульное меню на эвентах. RPG Maker XP
Шаг нулевой. Предисловие.
Вам надоело стандартное титульное меню? Скипты для титульного меню недостаточно гибкие? Хочется больше интерактивности? Тогда этот туториал для вас!
В нём мы рассмотрим создание простого меню из изображений, небольшой скрипт для проверки наличия сохранений и частично уберем титульное меню.

Шаг первый. Ресурсы.
Создадим простое меню с функциями “Новая игра” и “Загрузка”. Для этого нужны минимум два изображения. Примерно такие:
urbandreams.net.ru/title_begin.png
urbandreams.net.ru/title_cont.png
Заметим, что каждое из них на 50% прозрачно.
Можно в качестве фона использовать игровую карту, но я хочу фон – изображение. Взял и просто перекрасил стандартный титульный фон.
urbandreams.net.ru/001-Title01.jpg

Шаг второй. Скриптовая часть.
Войдем в Редактор Скриптов. Вставим над MAIN этот небольшой скрипт:
#-----------------------------
class Game_Player
  def check_save
    for i in 0..3
      if FileTest.exist?( Save#{i+1}.rxdata )
        @save_exists = true
      end
    end
    if @save_exists
      $game_switches[1] = 1
    end
  end
end
#-----------------------------

Он производит проверку на наличие файлов сохранений в директории игры. При нахождении оных включает свич 1. Число в квадратных скобках можно заменить на номер нужного вам свича.

Теперь немножко подкорректируем раздел MAIN.
Удалим строку $scene = Scene_Title.new
А над Graphics.freeze вставим следующие строки:
#-----------------------------
#Загрузка базы данных
    $data_actors        = load_data( Data/Actors.rxdata )
    $data_classes       = load_data( Data/Classes.rxdata )
    $data_skills        = load_data( Data/Skills.rxdata )
    $data_items         = load_data( Data/Items.rxdata )
    $data_weapons       = load_data( Data/Weapons.rxdata )
    $data_armors        = load_data( Data/Armors.rxdata )
    $data_enemies       = load_data( Data/Enemies.rxdata )
    $data_troops        = load_data( Data/Troops.rxdata )
    $data_states        = load_data( Data/States.rxdata )
    $data_animations    = load_data( Data/Animations.rxdata )
    $data_tilesets      = load_data( Data/Tilesets.rxdata )
    $data_common_events = load_data( Data/CommonEvents.rxdata )
    $data_system        = load_data( Data/System.rxdata )
    $defaultfonttype =  Arial 
    $defaultfontsize = 18
 
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_starting_members
#Отправка персонажа на стартовую позицию.
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    $scene = Scene_Map.new
#--------------------------------

Закрываем редактор Скриптов, сохраняем проект. Шаг второй завершен.


Шаг третий. Эвентинг.
Создадим отдельную карту для титульного меню. Разместим там стартовую позицию игрока. Поместим также на эту карту эвент. Начнем заполнение.

Страница первая. Инициализация.

Без условий запуска. Параллельное выполнение.
Сначала проверяем наличие сохранений. Возможны миллисекундные задержки между появлением и исчезновением изображений, поэтому затемняем экран. Запрещаем доступ к меню. Показываем фон.
Показываем изображения для кнопок (2-title_begin-начать; 3-title_cont-продолжить) с небольшим сдвигом и полной прозрачностью (Transparent = 0). У меня -45 и 45 пикселей. И сразу двигаем их к положению (0;0), делаем их видимыми (Transparent = 255). . Ставим задержку на время сдвига – 45 кадров.
Показываем еще один раз title_begin , но присваеваем ему новый номер – 4 (Transparent = 0). Сдвигаем к позиции (0;0) (Transparent = 255). Ставим задержку 36 кадров. Включаем селфсвич А.

Итого, по разные стороны появились кнопки, сдвинулись друг под друга. Выделилась кнопка – Начать.

Страница вторая. Условие запуска – селфсвич А включен. Параллельное выполнение.

Итак, на данный момент нажатие на Энтер должно начать игру. Организуем это.
Ставим проверку на нажатие кнопки С (C, Enter, SPACE). Если С нажата, то убираем наши изображения, даем игроку доступ к меню, возвращаем экрану нормальные цвета и перемещаем игрока на настоящее начало игры.
Если С не нажата, то ставим проверку на нажатие кнопки вниз. Проиграем какой-либо вменяемый звук, чтобы пользователь понял, что игра его поняла %). Сдвинем 4 на 45 пикселей (Transparent = 0). Она исчезла. Покажем еще раз title_cont , но с номером 5 (Transparent = 0) и сдвигом 45 пикселей. Сдвинем на место (0;0) (Transparent = 255). Подождем. Включим селфсвич В.

Повторим тоже самое для нажатой кнопки Вверх.

Страница третья. Условие запуска – селфсвич В включен. Параллельное выполнение.

Теперь у нас выбрано Продолжить. Сейчас нажатие на Энтер, пробел, С не должно ни к чему привести.
Для нажатых кнопок вверх и вниз организуем практически идентичный прошлой странице операции.
Сдвинем 5 и сделаем ее прозрачной. Покажем прозрачную 4, начнем ее сдвигать и делать видимой. Подождем окончание сдвига. Выключим Селфсвич В, передав таким образом управление второй странице.


Страница последняя, четвертая. Условие запуска – селфсвич В включен, свич 1 включен. Параллельное выполнение.

Если свич 1 включен, значит пользователь уже сохранялся и мы можем позволить игроку войти в меню загрузки. Убираем все наши изображения, возвращаем цвет. А теперь выполняем скрипт:
$scene = Scene_Load.new
В остальном четвертая страница идентична третей.


Шаг четвертый. Убираем титульник.
Мы не избавились полностью от титульного экрана, а лишь убрали его в начале игры. Если пользователь войдет в меню загрузки и выйдет из него, он увидит стандартный титульник. Если пользователь через игровое меню вернется к титульному экрану – он увидит стандартный титульник. Исправим это.

В редакторе Скриптов найдем Scene_Load. Внутри ищем строчки:
def on_cancel
    # Play cancel SE
    $game_system.se_play($data_system.cancel_se)
    # Switch to title screen
    $scene = Scene_Title.new
  End

Безжалостно стираем строчку $scene = Scene_Title.new и вместо нее пишем:
$game_self_switches[[1, 1,  A ]] = false
    $game_self_switches[[1, 1,  B ]] = false
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    $scene = Scene_Map.new

Где 1, 1, A – Номер карты, номер Эвента, Селфсвич. Таким образом мы выключаем наши селфсвичи и обрабатываем первую страницу нашего Эвента.

Теперь ищем в редакторе Скриптов Scene_End. Внутри ищем:
def command_to_title
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Fade out BGM, BGS, and ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # Switch to title screen
    $scene = Scene_Title.new
  End

Опять стираем строчку $scene = Scene_Title.new и пишем вместо нее знакомое нам:
$game_self_switches[[1, 1,  A ]] = false
    $game_self_switches[[1, 1,  B ]] = false
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    $scene = Scene_Map.new


Шаг последний. Послесловие.
К концу мы получили достаточно симпатичный анимированный титульный экран. Его можно расширить и до трех и более кнопок. Я считаю, что лучший учитель – опыт, поэтому дал лишь основу. Пробуйте, пытайтесь, творите. Ничего сложного в этом нет.
Описанный метод можно применять не только к созданию меню, но и для создания скажем, ммм, миниигр. Придумывайте, творите, создавайте. Чуть не забыл %). Демо: urbandreams.net.ru/Project37.rar

При использовании туториала упоминать мое имя в вашей игре не обязательно. Туториал может быть размещен на других сайтах только с моего разрешения. Порталам rpg-maker.info и urbandreams.net.ru разрешение не требуется.

Your faithful friend, Balmung.
На самом деле я добрый, только никто об этом не знает.
(мрачно) А те, кто знают, - уже никому не расскажут.
Администратор запретил публиковать записи гостям.

[RMXP] Титульное меню на эвентах 15 года 5 мес. назад #24000

  • Agemonorush
  • Agemonorush аватар
  • Вне сайта
  • Бывалый
  • Sylar
  • Сообщений: 91
  • Спасибо получено: 1
to Барманк
Очень хорошо! А на счет жуков, разве в скриптах нельзя прописать при, что бы при выходе из сцены загрузки или через меню, начиналась сцена map с ID стартовой карты?
Только надо опять ползать по всем этим скриптам, которые написаны на не понятном моему разуму языке! =)
I do nothing, I only criticize.
Администратор запретил публиковать записи гостям.

[RMXP] Титульное меню на эвентах 15 года 5 мес. назад #24012

  • Барманк
  • Барманк аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 1
Можно полазить. Но у меня получилась гадость %). Как с этой гадостью справлюсь, допишу туториал.
--
Полазил, подумал, исправил гадость и обновил тутор.
На самом деле я добрый, только никто об этом не знает.
(мрачно) А те, кто знают, - уже никому не расскажут.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.368 секунд