Я в настоящее время программирую игру с использованием cocos2dx engine, и у меня есть менеджер уровней, который отслеживает текущий уровень и сцену, которые необходимо загрузить. Я хочу, чтобы избежать долго, если заявления, такие как это:C++ шаблон для классов со статическим методом
Scene* scene;
if (level == 1)
{
scene = Game_Scene1::createScene();
}
else if (level == 2)
{
scene = Game_Scene2::createScene();
}
else if (level == 3)
{
scene = Game_Scene3::createScene();
}
(...)
else if (level == 10)
{
scene = Game_Scene10::createScene();
}
Director::getInstance()->replaceScene(TransitionFade::create(0.5, scene, Color3B(0,0,0)));
Метод screateScene()
статический метод
static cocos2d::Scene* createScene();
Что я мог сделать, чтобы «удалить», если заявление? Так это будет выглядеть примерно так:
Scene* scene = getScene(level, sceneClass::createScene());
и было бы взять правильный класс (то есть: Game_Scene1
, Game_Scene2
и т.д.)
Есть хорошее решение для такой задачи? Заголовок говорит о шаблоне, но я не уверен, что решение для этого шаблона.
Если 'level' - это значение времени выполнения, вы не можете (просто) использовать шаблон, так как ему потребуется значение времени компиляции. Но вы уверены, что у вас есть свой дизайн? Эти пронумерованные классы - это немного предупреждающий флаг. – Biffen
Почему метод статический? Это выглядит как динамический полиморфизм, т. Е. Базовый класс GameScene с методом 'virtual createScene()'. Затем вы создаете фабричный или заводский метод для создания правильного экземпляра на основе номера уровня. – iksemyonov
Или, может быть, он даже выглядит как 'Kit' (прототип основан на' Factory'). Почему существуют отдельные классы для сцен на разных уровнях? Этот тип материала должен быть динамическим, а не статическим. – iksemyonov