Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 处理可以经历多个阶段的场景的最佳设计模式是什么_Design Patterns - Fatal编程技术网

Design patterns 处理可以经历多个阶段的场景的最佳设计模式是什么

Design patterns 处理可以经历多个阶段的场景的最佳设计模式是什么,design-patterns,Design Patterns,这是我的问题 我正在尝试编写一个简单的小游戏引擎(我这样做是为了提高我的设计技能)。我有一个场景对象,它保存了渲染API渲染它所需的一切 当然,我希望我的场景不受未来变化的影响,这意味着未来对它的变化不必破坏它的界面。例如,如果我希望将来我的场景有一个可以打开和关闭的雾功能,我希望能够在不破坏场景界面的情况下添加它 重要的一点是,渲染API通过接口(显然名为“IScene”)与场景通信 我的想法倾向于“装饰者”模式,有人能提出更合适的建议吗?我建议看一看。你很快就会明白这不是一个简单的问题。雾可

这是我的问题

我正在尝试编写一个简单的小游戏引擎(我这样做是为了提高我的设计技能)。我有一个场景对象,它保存了渲染API渲染它所需的一切

当然,我希望我的场景不受未来变化的影响,这意味着未来对它的变化不必破坏它的界面。例如,如果我希望将来我的场景有一个可以打开和关闭的雾功能,我希望能够在不破坏场景界面的情况下添加它

重要的一点是,渲染API通过接口(显然名为“IScene”)与场景通信


我的想法倾向于“装饰者”模式,有人能提出更合适的建议吗?

我建议看一看。你很快就会明白这不是一个简单的问题。雾可能是一个过滤器(在屏幕上均匀分布)但这看起来不现实。雾应该更像是靠近地面的半透明云。因此,将其渲染为一个或多个半透明灰色对象可能更真实,但可能无法用当前硬件实现

[编辑]我想说的是:一个简单的装饰图案可能不足以实现任何复杂的效果。我没有见过很多引擎,但大多数都选择一个非常简单的场景对象,它只保存一些全局(环境光、相机位置、显示大小)加上要显示的对象列表。然后这些对象包含附加信息

这些东西非常愚蠢。渲染器会将存储在这些对象中的信息转换成显示硬件可以使用的东西


同样,我的建议是从现有的API中获得一些想法,因为它们已经犯了所有的错误。

我理解你对fog的看法,但我只是举了一个例子,我的问题不是关于fog,而是关于为了避免将来对IScene接口的更改而应用什么模式。阅读你编辑的评论,你已经说到点子上了,谢谢你的回答。