Основи Cocos2d-x

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

Перехід між сценами

Posted at — Apr 18, 2020

Розробники Cocos2d хотіли, щоб гра зсередини нагадувала театральну виставу: ряд сцен, що змінюються за командою режисера(Director)

Власне, для зміни сцен у Director є такі методи:

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

Наприклад, ось такий перехід:

Спочатку тут була якась сцена з анімацією-свічкою та об'єктом, що рухається. Потім це змінюється на сцену з повідомленням та меню, але ця нова сцена має містити старі елементи.

У Cocos2d немає прямого засобу, який би дозволяв досягти такого ефекту. Проте, можна зробити два кроки: зберегти зображення, згенероване для старої сцени, і використати його як фон у новій.

Приблизно так:

void StaticInterruptScene::switchToInstantScene() {
    const Size visibleSize = Director::getInstance()->getVisibleSize();
    RenderTexture* rt      = RenderTexture::create(visibleSize.width,
                                                   visibleSize.height);

    rt->begin();
    this->visit();
    rt->end();
    rt->getSprite()->setAnchorPoint(Vec2(0, 0));

    Scene* ims = InstantMenuScene::create(rt);

    Director::getInstance()->pushScene(ims);
  }
}

Тут об'єкт RenderTexture зберігає зображення, згенероване для старої сцени. InstantMenuScene — це нова сцена, використання переданого зображення там майже не відрізняється від будь-якого іншого, тому я тут його не привожу.