Створення ігрової сцени
Тепер, коли з додаванням нових модулів та GUI ми розібралися, можна розпочинати створення першої ігрової сцени(ігрового рівня).
Ігрова сцена в Meowui дещо схожа на контекст, але в той же час має суттєві відмінності. Головна відмінність полягає в тому, що ігрова сцена не є автономною одиницею в прошивці. Вона має зовсім інші завдання та може функціонувати тільки в межах контексту, який буде нею керувати. У нашому випадку це SimpleRpgContext. Тому в цей клас я додаю поле, що буде містити вказівник на поточну сцену, поле-об’єкт на потік, через який можна передавати дані між сценами, та відповідні методи, для керуванням станом гри.
Для класів ігрових сцен було створено папку simple_rpg/scene.
Якщо бути точним, то перша ігрова сцена буде не зовсім "перша". Для того, щоб не дублювати код, який повторюється в кожній сцені гри, я створив абстрактний клас IBaseScene базової сцени, яка наслідується від IGameScene і містить в собі типовий для всіх сцен код. Після цього унаслідував від неї OpenWorldScene.
Кожна ігрова сцена повинна наслідуватися від IGameScene або від будь-якої іншої, що публічно наслідує її. Зверніть увагу на конструктор класу OpenWorldScene. Він має три обов’язкові параметри. Це посилання на об’єкти драйвера графіки, вводу та DataStream. З першими двома питань не повинно виникнути. Об’єкт DataStream необхідний для переносу даних між сценами. Цей об’єкт розміщується в модулі гри і передається зі сцени в сцену. Тобто з будь-якого ігрового рівня можна серіалізувати ігрові об’єкти в цей "контейнер", а в наступній ігровій сцені десеріалізувати їх.
Примітка
Розробник гри повинен сам вирішувати, потрібна йому серіалізація чи ні, а також де і коли будуть десеріалізовані об’єкти. Також розробник може сам додати більше параметрів у конструктор ігрової сцени, якщо це необхідно.
Кожна ігрова сцена це окремий ігровий світ, який не знає нічого про інші ігрові рівні. Будь-які дані можна передати між рівнями тільки через зовнішній DataStream з допомогою серіалізації. Уся інформація, що не була додана в цей об’єкт буде втрачена разом з рівнем, без можливості відновлення.
Під час створення ігрового рівня, розробник, в першу чергу, повинен подбати про коректне створення ігрових об’єктів та рельєфу сцени. На кожному рівні для його мінімального функціонування потрібен хоча б один головний об’єкт, до якого необхідно прив’язати камеру та будь-яка поверхня.
Поняття "поверхня" або рельєф означає тло, на фоні якого відбувається гра. Це може бути лише зображення, комбінація зображення та плиток, або тільки поверхня зібрана на основі мапи плиток.
Зображення гри, яке виводиться на дисплей, формується автоматично ігровим рушієм в наступному порядку:
1) Якщо сцена на паузі, то тільки ігрове меню, якщо є. Інакше цей пункт пропускається.
2) Фонове зображення, якщо є.
3) Шар плиток, якщо є.
4) Ігрові об’єкти, що автоматично відсортовані по розташуванню на ігровій мапі та глибині їх шару.
5) Ігровий інтерфейс, якщо є.
Формування тла гри на основі зображення в даній інструкції не розглядатиметься детально. Розповідати про статичне зображення тла нічого. Достатньо додати зображення, яке ігровий рушій самостійно буде виводити на дисплей. Про динамічну зміну зображення навпаки, розповідати можна дуже багато. Тому що під час динамічного формування зображення можна використати купу варіантів та алгоритмів. Усе буде залежати тільки від ваших потреб і можливостей МК. Взагалі, формування тла на основі динамічного зображення доволі складна справа, яка не дуже підходить новачкам. Значно простіше формувати тло гри з допомогою плиток.
Плитка це невеликий квадратний пазл цілого зображення. Майже всі старі 2D ігри побудовані на їх основі. Чому саме плитки? - Тому що це дуже дешево для мікроконтролера. Наприклад, на основі декількох невеликих шматків дороги, що займають мало місця в пам’яті, можна побудувати усі дороги в грі. Зображення плиток(тайлів) створені таким чином, щоб їх сторони безшовно підходили до інших тайлів відповідного типу. Тому один і той самий пазл можна використовувати в різних місцях. Ви можете самостійно переглянути безкоштовні, і не тільки, набори плиток для ігрових світів у пошуковику.
Для створення ігрових світів на основі плиток існують різні інструменти. Проте, на мою думку, найкращим є Tiled. Ним можна користуватися безкоштовно, а також в нього є підтримка української мови! Tiled це редактор ігрового 2D світу. Ви можете завантажити до нього будь-які набори плиток та скласти з них ігрову мапу, яку зможе відобразити ігровий рушій Meowui.
Важливо
Всі плитки повинні бути квадратними та мати однаковий розмір в межах одного ігрового рівня! Проте для різних ігрових рівнів розміри плиток можуть відрізнятися.