Тепер, коли у нас герой-персонаж налаштований зіткненням, і все, ми також повинні додати зіткнення з землею, щоб жаба мала щось зіткнутися з (або бігти). Ми зробимо це через секунду, але, по-перше, ми повинні зробити кілька рефакторингів і поставити всі елементи рівня в окрему колекцію та трохи почистити структуру файлу:
- Створіть новий файл level.collection (клацніть правою кнопкою миші головну в Project Explorer і виберіть New ▸ Collection File).
- Відкрийте новий файл, клацніть правою кнопкою миші корінь у контурі та виберіть Додати копію з файлу та оберіть earth.collection.
- У level.collection клацніть правою кнопкою миші корінь в контурі та виберіть Add Game Object File і оберіть hero.go.
- Тепер
- створіть нову папку під назвою level в корені проекту (клацніть правою кнопкою миші білий пробіл нижче game.project і виберіть New ▸ Folder), а потім перемістіть активні рівні, які ви створили до цього часу: файли level.collection, level.atlas , папка "images", яка містить зображення для атласу рівня, а також файли ground.collection і ground.script.
- Відкрийте головну.
- збір, видалити ground.collection, а замість цього додати level.collection (клацніть правою кнопкою миші та додайте колекцію з файлу), який зараз містить ground.collection. Переконайтеся, що ви розміщуєте колекцію в позиції 0, 0, 0.
Як ви вже помітили, ієрархія файлів, яка відображається в Провіднику проекту, відокремлена від структури вмісту, яку ви створюєте у ваших колекціях. Окремі файли посилаються на файли колекційних та ігрових об'єктів, але їх розташування абсолютно довільне.
Якщо ви хочете перемістити файл на нове місце, Defoll допомагає автоматично оновлювати посилання на файл (рефакторинг). При створенні складного програмного забезпечення, як-от гра, надзвичайно корисно мати можливість змінювати структуру проекту, коли воно зростає і змінюється.
Defold закликає це і робить процес гладким, не бійтеся переміщати файли навколо!
Ми також повинні додати об'єкт контролера з компонентом скрипту до колекції рівнів:- Створіть новий файл сценарію. Клацніть правою кнопкою миші на папці рівня в Провіднику проекту та виберіть Новий файл ▸ Сценарій. Назвіть файл controller.script.
- Відкрийте файл сценарію, скопіюйте в нього наступний код та збережіть файл:
-- controller.script go.property("speed", 360) function init(self) msg.post("ground/controller#script", "set_speed", { speed = self.speed }) end
- Це властивість скрипту. Ми встановили його за замовчуванням, але будь-який розміщений екземпляр сценарію може перевизначити це значення безпосередньо у вікні властивостей редактора.
- Відкрийте файл level.collection.
- Клацніть правою кнопкою миші корінь в контурі та виберіть Додати об'єкт гри.
- Встановіть Id в "контролер".
- Праворуч -клацніть на ігровому об'єкті "Контролер" в контурі та виберіть "Додати компонент з файлу" та виберіть файл controller.script у папці рівня.
- Зберегти файл.
Ігровий об'єкт "controller" не існує у файлі, але створюється на місці у колекції рівнів. Це означає, що екземпляр об'єкта ігрового процесу створюється з даних на місці. Це добре для об'єктивних ігрових об'єктів, таких як цей.
Якщо вам потрібні кілька екземплярів деяких ігрових об'єктів і ви хочете мати можливість змінювати прототип / шаблон, який використовується для створення кожного екземпляра, просто створіть об'єктний файл і додайте об'єкт гри з файлу до колекції. Це створює об'єкт гри з посиланням на файл як прототип / шаблон.
Тепер мета цього об'єкта гри контролера полягає в тому, щоб контролювати все, що пов'язано з робочим рівнем. Незабаром цей сценарій буде відповідати за нерестові платформи та монети, з якими герой може взаємодіяти, але наразі він лише встановить швидкість цього рівня.
У функціі init () контролера рівня, він відправляє повідомлення компоненту сценарію об'єкта наземного контролера, адресованого його ідентифікатору:
msg.post("ground/controller#script", "set_speed", { speed = self.speed })
Ідентифікатор ігрового об'єкта контролера встановлюється на "ground / controller", оскільки він живе в колекції "ground". Потім ми додаємо ідентифікатор компонента "скрипт" після хеш-символу "#", який відділяє ідентифікатор об'єкта від ідентифікатора компонента.
Зверніть увагу, що наземному скрипту ще немає коду, який реагує на повідомлення "set_speed", тому ми повинні додати функцію on_message () до earth.script і додати логіку для цього.
- Відкрити ground.script.
- Додайте такий код і збережіть файл:
-- ground.script
function on_message(self, message_id, message, sender)
if message_id == hash("set_speed") then
self.speed = message.speed
end
end
- Усі повідомлення хешуватимуться внутрішньо при відправленні, і їх потрібно порівняти з хеш-значенням.
- Дані повідомлення - це таблиця Lua з даними, що надсилаються разом із повідомленням.
Немає коментарів:
Дописати коментар
Kоментарі неуkраїнсьkою видалятимуться