Как чередовать две сцены в cocos2d-x?

Я создаю игру, используя Cocos2d-x. В настоящее время я создаю игровое меню, в этом меню мне нужно иметь возможность переключаться как на мою менструальную сцену, так и на мою игровую сцену (когда я говорю о переключении на игровую сцену, я на самом деле имею в виду только «перезапустить» игру). Но циклические зависимости мешают мне сделать это.
MenuScene должен быть в состоянии использоватьGameScene::create() для того, чтобы переключиться на игровую сцену и меню Gameover должно быть в состоянии использовать оба GameScene::create() or its restart funtion а также MenuScene::create() что дает мне проблемы с круговой зависимостью
Я не могу разделить меню Gameover на собственный файл, так как мне все еще нужна зависимость GameScene, а GameScene потребуется Gameover.
Я не могу объединить их, так как GameScene тогда зависит от MenuScene

Итак, мой вопрос: как мне чередовать две сцены в cocos2d-x c ++.

Я где-то читал о продвижении и всплывающих сценах в Director, но я не очень понимаю, как это работает, и могу ли я использовать это для своих целей.
Заранее спасибо!

РЕДАКТИРОВАТЬ:
Теперь, когда я думаю об этом, могу ли я просто передать mMenuScene Директору, прежде чем перейти к GameScene? Это должно сработать, если я правильно понимаю механику push / pop.

1

Решение

Я думаю, что у вас может быть неправильное представление о том, насколько это сложно, используя способ, который я представил ниже, может и должен определенно разделить вашу игру по сцене в отдельный файл.

Замена сцены достаточно проста, просто используйте код ниже:

Включая ваш файл:

#include "MainGameScene.h"

Создание и переключение сцен в вашем onClickListener:

auto gameOverScene = GameOverScene::createScene();

// use code below for hard replace
Director::getInstance()->replaceScene(gameOverScene );

// or use code below for transition fade replace
Director::getInstance()->replaceScene(TransitionFade::create(1, gameOverScene , Color3B(255, 255, 255)));

Что касается перезапуска функциональности. Я обычно предоставляю обратный вызов в мою игру через сцену, которую я вызываю, когда нажимается кнопка перезапуска. Не то чтобы я когда-либо менял свою сцену полностью на мобильную игру поверх сцены, но я все равно делаю это одинаково независимо. Итак, давайте сделаем шаги (Предполагается, что вы разделили игру над сценой в отдельный файл с именем GameOverScene :)).

  1. Сохраните указатель функции в вашем GameOverScene.h для вашего метода сброса в MainGameScene:

    std::function<void()> _resetCallback;
    
  2. Установите указатель на функцию из основной игровой сцены, прежде чем запускать с GameOverScene.

    auto gameOverScene = GameOverScene::createGameOverScene();
    gameOverScene->setResetCallback(std::bind(&MainGameScene::reset, this));
    
  3. Когда нажата кнопка сброса, вызовите _resetCallback

    void GameOverScene::onResetClicked(Ref* sender)
    {
    _resetCallback();
    }
    

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]