Создать игру, создание игр, конструктора игр, игровые движки, разработка игр, сделать игру
Приветствую Вас Гость · Вход · Регистрация  ·  Новые сообщения · Участники · Правила · Поиск · RSS
Страница 1 из 11
Форум разработчиков игр » Полезные статьи, Примеры и Исходники » Scirra Construct » [Статья] Сохранение и чекпоинты (Сохраняем прогресс прохождения)
[Статья] Сохранение и чекпоинты
Loko™ Дата: Воскресенье, 18.11.2012, 15:08 | Сообщение # 1
Просмотр профиля: Loko™

Сообщений: [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
Форум разработчиков игр » Полезные статьи, Примеры и Исходники » Scirra Construct » [Статья] Сохранение и чекпоинты (Сохраняем прогресс прохождения)
Страница 1 из 11
Поиск:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2016 Хостинг от uWeb
Топ Разработка игр Рейтинг@Mail.ru