我正在建造一个小型视频游戏.我正在尝试做好oop/design.
我有一个地图对象和一个相机对象.这些都是在'world'对象中创建的.
但是有一个问题.在地图中,我渲染并更新所有内容.出于性能原因,我只想更新/渲染播放器屏幕上的内容.
相机对象具有此信息 - 但地图对象无法访问它.
我可以通过几种方式获取此信息,但希望获得有关如何执行此操作的选项.
这里可能最相关的OO原则是单一责任原则.
考虑这些责任声明:
Map
对象负责保持世界的布局Camera
对象负责维护用于观察世界的视点鉴于此,Map
负责呈现屏幕上的内容显然不在其管辖范围之内.
你或许应该有一个WorldRenderer
,应该采取既Map
与Camera
以呈现的画面.虽然我们对优秀设计的主题,您可能还需要使WorldRenderer
一成不变的本质-它会在Map
和Camera
在建设,从这一点上,那些引用不能被改变,例如:
public class WorldRenderer {
private final Map map;
private final Camera camera;
private final List<LightSource> lightSources;
public WorldRenderer(Map map, Camera camera, List<LightSource> sources) {
this.map = map;
this.camera = camera;
this.lightSources = sources;
}
public void render() {
Viewport viewport = camera.getViewport();
Map submap = map.getVisibleMapFor(viewport);
Scene litScene = applyLighting(submap); // using lightSources
renderScene(litScene);
}
private void renderScene(Scene scene) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
......你可能已经注意到这个例子也提供了一些光源.同样,那是使用SRP将渲染过程与其组件元素分离.