Loko™ |
Дата: Воскресенье, 18.11.2012, 15:08 | Сообщение # 1 |
Сообщений: [146]
|
Всем привет, с вами Loko™ с очередным уроком по Construct Classic. На этот раз мы склепаем систему Save/Load с помощью INI файлов, а также узнаем об одном способе создания чекпоинтов. Урок обещает быть долгим, поэтому заварите чаю, усядьтесь поудобнее, расслабьтесь и приступайте к прочтению.
Save/Load с помощью INI файлов Давно уже не секрет, что стандартные средства сохранения/загрузки Construct Classic мягко говоря не идеальны. Поэтому мы пойдем другим путем, используя INI файлы. INI файлы – это обычные текстовые файлы, в которых будут храниться нужные нам значения. В чем суть данного метода: Мы добавляем глобальную переменную, в которой цифры будут означать номера уровней. И при старте одного из уровней будем давать этой переменной нужное значение и записывать это значение в INI файл. Таким образом, у нас всегда будет внешний файл с хранящейся информацией, и нам остается только загружать его, чтобы восстановить прогресс прохождения.
Подготовка Создадим меню с двумя кнопками – "Продолжить игру" и "Новая игра".
Создадим первую кнопку: Insert an object – Text Переименуйте только что созданный объект в Continue. Измените следующие поля в Properties: Text – Продолжить игру Size – 30 Bold – поставьте галочку
Создадим вторую кнопку: Insert an object – Text Переименуйте только что созданный объект в Newgame. Измените следующие поля в Properties: Text – Новая игра Size – 30 Bold – поставьте галочку
Расставьте аккуратненько созданные тексты на уровне. Например, так:
Создадим глобальную переменную: В правом окошке снизу переходим во вкладку Project – щелкаем правой кнопкой мыши по папке Global variables – Add global variable – в поле Name пишем Level – OK
Обратим внимание на папку Layouts. Сейчас там красуется лишь один уровень с названием Layout 1. Выделите его и переименуйте на Menu. Склонируйте уровень – правой кнопкой мыши на Menu – Clone layout Переименуйте только что склонированный уровень в Level 1. Это будет первый уровень игры.
Создадим еще один уровень: Правой кнопкой мыши на Level 1 – Clone layout Переименуйте только что склонированный уровень в Level 2. Это, соответственно, второй уровень в игре.
Сделайте какие-нибудь изменения на уровнях. Сделайте переходы между уровнями (если вы не знаете, как делаются переходы, прочтите 7 часть статьи "Создание 2D платформера а-ля Ghost Quest")
Добавьте в каждый уровень поддержку клавиатуры и мыши: Insert an object – Mouse & Keyboard
Обязательно добавьте в каждый уровень объект INI: Insert an object - INI
Итак, подготовительная часть закончена, переходим в редактор событий уровня Menu (Event Sheet Editor). Сперва нам нужно указать, с каким INI файлом мы будем работать.
Событие: Insert event – System – Start of layout
Действие: New action – INI – Set INI file – в поле Path пишем apppath+"Save.scrr" – Finish
В событии мы указали условие – при запуске уровня В действии мы указали, с каким INI файлом будем работать (Save.srr)
Следующее событие будет для начала новой игры.
Событие: Insert event – MouseKeyboard – On object clicked – Pick an object – Newgame – Finish
Действие: New action – System – Next layout – Finish
Событие – игрок кликнул по тексту "Новая игра" Действие – перейти на следующий уровень (предполагается, что следующий уровень – это уровень 1)
Теперь сделаем событие для щелчка по "Продолжить игру".
Событие: Insert event – MouseKeyboard – On object clicked – Pick an object – Continue – Finish
Действие: New action – System – Set value – в графе Variable выбираем Level, в поле Value пишем INI.ItemValue("Level", "Level") – Finish
Событие – игрок кликнул по тексту "Продолжить игру" Действие – загружаем значение глобальной переменной из INI файла
Подсобытие 1: Щелкаем правой кнопкой мыши по только что созданному событию – Insert sub-event – System – Compare global variable – Level, Equal to, Compare to = 1 – Finish
Действие для подсобытия 1: New action – System – Go to layout – в поле Layout вставляем значение 2 – Finish
Подсобытие – если загруженное значение глобальной переменной равно 1 Действие – перейти на уровень 2 (т.к. уровень Menu считается первым, то уровень Level 1 – считается вторым)
Подсобытие 2: Щелкаем правой кнопкой мыши по только что созданному событию – Insert sub-event – System – Compare global variable – Level, Equal to, Compare to = 2 – Finish
Действие для подсобытия 2: New action – System – Go to layout – в поле Layout вставляем значение 3 – Finish
Подсобытие – если загруженное значение глобальной переменной равно 2 Действие – перейти на уровень 3
Если проверить, то по нажатию на кнопку "Новая игра" – загружается первый уровень, но по нажатию на кнопку "Продолжить игру" – ничего не происходит. Это потому, что мы еще не настроили сохранение прогресса в INI файл на уровнях.
Переходим в редактор событий уровня Level 1.
Событие: Insert event – System – Start of layout
Действия: 1. New action – System – Set value – Level, Value = 1 – Finish 2. New action – INI – Set INI file – в поле Path пишем apppath+"Save.scrr" – Finish 3. New action – INI – Write value – в поле Group пишем "Level" (в кавычках), в поле Item пишем "Level" (в кавычках), в поле Value пишем global('Level') – Finish
Событие – при старте уровня Действие 1 – установить значение глобальной переменной Level на 1 Действие 2 – указываем, с каким INI файлом мы работаем Действие 3 – записываем значение глобальной переменной в INI файл
Переходим в редактор событий уровня Level 2.
Событие: Insert event – System – Start of layout
Действия: 1. New action – System – Set value – Level, Value = 2 – Finish 2. New action – INI – Set INI file – в поле Path пишем apppath+"Save.scrr" – Finish 3. New action – INI – Write value – в поле Group пишем "Level" (в кавычках), в поле Item пишем "Level" (в кавычках), в поле Value пишем global('Level') – Finish
Событие – при старте уровня Действие 1 – установить значение глобальной переменной Level на 2 Действие 2 – указываем, с каким INI файлом мы работаем Действие 3 – записываем значение глобальной переменной в INI файл
Все готово. Теперь, на уровнях записываются значения глобальных переменных в INI файл. И, если мы включим первый или второй уровень, затем выключим игру, запустим уровень Menu и нажмем на "Продолжить игру" – запуститься тот уровень, на котором мы были в последний раз.
Чекпоинты Для реализации чекпоинтов мы будем использовать систему Quicksave/Quickload. Система очень проста – при соприкосновении героя и чекпоинта – игра делает быстрое сохранение. Когда герой погибает – игра делает быструю загрузку.
Переходим на нужный уровень. Создадим новый спрайт: Insert an object – Sprite – заливаем все зеленым цветом (в игре этот спрайт будет невидимым, так что можете не стараться, и не придавать залитому объекту индивидуальности) – сохраняем Переименуйте только что созданный спрайт в Checkpoint.
Сделаем его невидимым: Выделяем Checkpoint – Properties – поставьте галочку напротив Invisible on start
Переходим в редактор событий этого уровня (Event Sheet Editor) Сперва сделаем быстрое сохранение игры при запуске уровня.
Событие: Insert event – System – Start of layout
Действие: New action – System – Quicksave/Quickload – из списка выбираем Quicksave – Finish
Здесь событие – при запуске уровня Действие – сделать быстрое сохранение игры.
Сделаем какое-нибудь событие, при котором герой считается мертвым, и игру можно загружать по новой. Например, если герой вышел за пределы уровня (например, упал в пропасть).
Событие: Insert event – bazis (это герой) – Object is outside layout?
Действие: New action – System – Quicksave/Quickload – из списка выбираем Quickload – Finish
Здесь событие – если герой покинул пределы уровня Действие – сделать быструю загрузку с места последнего быстрого сохранения.
Сделаем горячую клавишу для быстрой загрузки:
Событие: Insert event – MouseKeyboard – On key pressed – R (это горячая клавиша быстрой загрузки) – Finish
Действие: New action – System – Quicksave/Quickload – из списка выбираем Quickload – Finish
Событие – нажата клавиша R Действие – сделать быструю загрузку с места последнего быстрого сохранения.
Разберемся, непосредственно, с чекпоинтом.
Событие: Insert event – bazis – On collision with another object – Pick an object – Checkpoint – Finish
Действия: 1. New action – Checkpoint – Destroy 2. New action – System – Quicksave/Quickload – из списка выбираем Quicksave – Finish
Событие – герой коснулся чекпоинта Действие 1 – уничтожить чекпоинт (чтобы игрок не мог сохраняться несколько раз подряд на одном и том же месте) Действие 2 – сделать быстрое сохранение
Все готово, проверяем. Небольшой совет по чекпоинтам – размещайте их в спокойных местах, где рядом нет противников. Чтобы не было такой картины: быстрая загрузка - хлоп, снаряд в героя. Если вы хотите, чтобы при быстрой загрузке восстанавливалось количество здоровья, или чего еще – используйте событие System – On load и действиями к нему восполняйте драгоценное HP.
Я надеюсь, что мой урок еще на шаг приблизил вас к реализации вашей игры. Для вас старался Loko™, успехов!
Сообщение отредактировал: Loko™ - Воскресенье, 18.11.2012, 18:29 |
|
| |