我正在为视频游戏课程编写游戏(不幸的是,它什么也没教),我在设计游戏实体和实际运行游戏的类之间的交互时遇到了麻烦。
我的问题几乎可以归结为:假设一个实体有一个位置,它不应该直接修改它(而是必须等待游戏管理器运行一个游戏步骤),但它应该能够访问它,运行 AI 检查等。
我的解决方案是创建一个Position
与 的朋友的类GameManager
,并创建一个像这样的实体类
class Entity {
public:
Position & getPosition() { return pos_; }
private:
Position pos_;
};
所以经理可以修改实体的位置,但其他类只能观察。然而,这种推理适用于许多其他属性,并且由于实体类实际上派生为一系列子类,这些子类具有越来越多的属性,因此我friend
几乎必须将属性放在任何地方。
解决这个问题的更好方法是什么?