我试图弄清楚如何构造我的游戏。我想将我的“经理”传递给高层,而不是使其全局化。但是我遇到了一个问题。我的一位经理更新了场景。由于应用程序包含退出方法,因此需要将应用程序引用传递给场景。但是我的应用程序保留并更新了此SceneManager。因此,我的应用程序现在包括需要更新的SceneManager,而我的SceneManager包括需要将应用程序引用传递给场景的Application。
基本上,应用程序拥有所有管理器,SceneManager将应用程序引用传递给场景,场景使用管理器是从应用程序引用中获得的。
// In application
sceneManager.updateScenes(*this);
// In SceneManager
currentScene.update(application)
// In scene
application.getSceneManager().doSomething()
谁能建议我如何优雅地构建游戏的这一部分?我知道前向声明,但是我想知道是否有解决方案而无需进行前向声明。
我可以使用全局变量,但我不愿意。
最佳答案
解决此问题的一种常见(但不是唯一)解决方案是让Scene通过Application实现的接口(interface)与Application通信,而不是直接引用。
这样做的另一个好处是,可以更清楚地表达需要准确调用的Scene(和其他依赖项)。
例如:
interface ISceneHandler {
void Quit(); // Request that we quit the game.
}
class Application : ISceneHandler {
private SceneManager sceneManager;
public Application() {
// Pass ourself as the handler.
sceneManager = new SceneManager(this);
}
public void Quit() { ... }
}
class SceneManager {
private ISceneHandler handler;
public SceneManager(ISceneHandler handler) {
this.handler = handler;
}
public void SomeEvent() {
this.handler.Quit();
}
}
关于c++ - 如何在不引入通函包含的情况下构建此结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59723854/