gpt4 book ai didi

java - 关于游戏的设计、OOP

转载 作者:行者123 更新时间:2023-11-29 06:44:13 25 4
gpt4 key购买 nike

我正在开发一款小型视频游戏。我正在努力做好 oop/设计。

我有一个 map 对象和一个相机对象。这些都是在“世界”对象中创建的。

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

相机对象有这个信息——但是 map 对象不能得到它。

我可以通过多种方式获取此信息,但我想知道如何操作。

最佳答案

这里可能最相关的 OO 原则是 Single Responsibility Principle .

考虑这些责任声明:

  • 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) {
...
}
}

...您可能已经注意到该示例还提供了一些光源。同样,这是使用 SRP 将渲染过程与其组件元素分离。

关于java - 关于游戏的设计、OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com