我正在制作游戏。我有一个Level类,它有一个Drawing对象的集合,并跟踪玩家在关卡中的位置。
主角(采用Drawing对象形式)需要能够在主角与另一个物体碰撞时停止水平移动。
class Level {
...
Position offset;
vector<Drawing*> drawings;
...
}
class MainCharacter : public Drawing {
...
void onCollide(Drawing* other, Level& level) {
level.stopMovement(); // prevent level from moving any further in that direction
}
}
正如您所看到的,我的预期实现会导致循环依赖:Level有一个Drawings集合,需要引用Level才能阻止它。
是否有可以帮助我的设计模式?我已经研究过观察者和模型视图控制器模式了,但我不确定它们能在这里做多少好事。
我目前只是通过引用onCollide函数传递位置。
编辑:我意识到我有一个对象工厂,它正在复合循环依赖,因为它包含了Drawing .h,因此它可以创建Drawing对象。因此,Level包括Factory和Drawing,Factory包括Drawing。绘图想要转发声明级别,但它需要访问其成员,因此它无法转发声明。