Основи Cocos2d-x

Статті про розробку ігор за допомогою Cocos2d-x

Основні терміни Cocos2d-x

Posted at — Mar 23, 2020

У попередніх постах мова йшла про те, як створити базовий проект програми у Cocos2d-x. Точніше, той проект створювався автоматично скриптом cocos, потрібно було його лише скомпілювати та запустити.

Цього разу я розкажу про основні терміни, поняття та класи фреймворку, а також поясню, як вони використовуються у тому базовому проекті.

Scene

Scene — це тло, контейнер, всередині якого живуть своїм життям усі інші елементи, які користувач бачить на екрані. В реальній програмі буде мінімум дві сцени: меню та ігрове поле. Перемикання між різними сценами здійснюється за допомогою синглтону класу Director. Відповідно до задуму розробників, це має нагадувати театральну сцену, декорації на якій змінюються за наказом режисера. Втім, у наших перших тестових програмах сцена буде лише одна, тому ніякого перемикання не буде.

Найважливіше у сцені — метод init:

bool SmokeTestScene::init() {
  // 1. super init first
  if (!Scene::init()) {
    return false;
  }

  //
  <створення інших об'єктів>

  return true;
}

Фактично, цей метод є конструктором. Використовувати реальний C++ конструктор для цього класу не дуже зручно, тому зазвичай більшість внутрішніх об'єктів сцени створюються саме під час виконання init.

Node та його нащадки

Node — базовий клас, що реалізує спільну для об'єктів сцени функціональність.

Усі об'єкти Node мають такі властивості:

Крім того, Node реалізує відносини parent-child. Можна призначити один об'єкт дитиною іншого, і тоді при видаленні батьківського об'єкту він видалить всіх своїх дітей. Пізніше буде окремий пост про роботу з пам'яттю та створення-видалення об'єктів, а поки що у тестових програмах це не так важливо.

У нашій програмі було три нащадки Node:

Ось всі вони у нашій дефолтній програмі:

Тестова програма

Напис “GL Verts / GL calls” не є частиною сцени. Це налагоджувальна інформація, яку фреймворк додає до вікна програми. Її можна приховати, але поки що цього робити не варто, воно ще знадобиться.

В принципі, згаданий вище клас Scene також є нащадком Node. Але він використовується трохи інакше, ніж інші, тому його краще було розглядати окремо.