设计,关于游戏的OOP

1 java oop

我正在建造一个小型视频游戏.我正在尝试做好oop/design.

我有一个地图对象和一个相机对象.这些都是在'world'对象中创建的.

但是有一个问题.在地图中,我渲染并更新所有内容.出于性能原因,我只想更新/渲染播放器屏幕上的内容.

相机对象具有此信息 - 但地图对象无法访问它.

我可以通过几种方式获取此信息,但希望获得有关如何执行此操作的选项.

mil*_*use 7

这里可能最相关的OO原则是单一责任原则.

考虑这些责任声明:

  • Map对象负责保持世界的布局
  • Camera对象负责维护用于观察世界的视点

鉴于此,Map负责呈现屏幕上的内容显然不在其管辖范围之内.

你或许应该有一个WorldRenderer,应该采取MapCamera以呈现的画面.虽然我们对优秀设计的主题,您可能还需要使WorldRenderer一成不变的本质-它会在MapCamera在建设,从这一点上,那些引用不能被改变,例如:

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将渲染过程与其组件元素分离.