我了解指针和引用的基础知识,但我遇到的最大问题是决定何时使用它们(以及使用哪个)。我将给出的主要示例是基本游戏之一。假设设置类似于:
- 新世界
- 相机
- 地图
World 是一个指针,因为每次游戏开始新的存档或加载现有的存档时,它都会删除世界并加载新的世界。但是在 World 内部,Camera 和 Map 应该只存在一个,并且只存在于 World 的持续时间内。如果世界被摧毁,那么显然他们也应该被摧毁。但是.. 假设 Map 需要访问相机(但其他对象也需要),Camera 应该通过引用传递给 Map 还是作为指针传递,还是?例如,如果它应该是通过引用,它应该是:
map = Map(&camera);
(inside map class) Map(Camera camera) {...}
或者更像:
map = Map(camera);
(inside map class) Map(Camera &camera) {...}
另外,假设 Map 包含一个称为网格的二维图块矢量。就像是:
std::vector< std::vector< Tile > > > grid;
现在假设我有一个 PathFinder 类,需要传入该网格。它需要直接编辑图块以更改 f、g 等值(用于寻路)。该 2D 向量是否应该只是 Tile 的普通 2D 向量,而整个事物通过引用传递给 PathFinder?还是应该是 Tile 指针的 2D 向量?
此外,NPC 和玩家将有一个 currentTile,即他们当前所在的图块。他们需要有一个指向该图块的引用或指针,以便他们还可以通过 NPC/Player 类中的类似内容将自己设置为该图块上的占用者:
currentTile = tile;
currentTile->SetOccupant(this);
当我破坏该网格以加载新地图时,另一个问题出现了,我如何轻松处理以确保没有任何东西指向不再存在的瓷砖。我是否只需要遍历这些类并将 currentTile 设置为 NULL?
这就是我开始对这些东西感到困惑的地方。任何帮助表示赞赏,因为我显然很nooby。@_@; 抱歉,如果这不是真正的游戏主题。如果它需要移动到不同的 stackexchange,请告诉我或移动它(如果可以的话)。>_<