Основи Cocos2d-x

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

Робота з екранами різних розмірів

Posted at — May 4, 2020

В одній з перших статей я рекомендував видалити з створеного cocos дефолтного коду майже все, що стосується роботи з різними роздільними здатностями. Цій проблемі присвячений окремий баг в офіційному репозиторії, але у нього низький приорітет.

Розробка Cocos2d починалась у далекі-далекі часи, коли різновидів форматів екрану було небагато. Потім розмаїття сильно збільшилось, а на сьогоднішній день виглядає так, що всі користувачі знову ходять з більш-менш однаковими екранами. У певний момент була актуальною проблема роздільної здатності: програма мала використовувати різні набори зображень для пристроїв різних поколінь. На мій погляд, зараз такої необхідності уже немає, проте у вас може бути інша думка з цього приводу.

Теоретично, процес розробки має виглядати приблизно так:

У першій програмі ви могли бачити такий код:

auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin      = Director::getInstance()->getVisibleOrigin();

visibleSize — це розмір тієї частини екрану, яку бачить користувач. origin — положення нижнього лівого кута частини екрану, яку бачить користувач відносто того зображення, яке згенерувала б програма в ідеальному випадку.

Уявіть собі ось таку ситуацію (цифри на сьогоднішній день виглядають нереальними, але най буде)

В даному випадку:

Cocos2d пропонує кілька варіантів приведення (ResolutionPolicy):

Також можна реалізувати свою власну політику, як зроблено у цій статті.

Крім того, можна не вказувати design resolution а запуститись з реальним розміром екрану. Для цього в AppDelegate.cpp треба зробити так:

Size realScreenSize = glview->getFrameSize();
glview->setDesignResolutionSize(realScreenSize.width, realScreenSize.height,
                                ResolutionPolicy::NO_BORDER);

Тут байдуже, яку ResolutionPolicy вказувати, все одно запуск виконується з розміром екрану поточного пристрою.

Якщо ви захочете використовувати різні набори зображень для різних пристроїв, доведеться змінювати дефолтні шляхи, за якими завантажуються файли. Детальніше про це написано тут, тут або у цій статті.