【发布时间】:2011-04-26 23:17:32
【问题描述】:
我有 Camera 类,它处理相机行为。其中的字段是对目标的 Cube 类的引用(Cube 只是对象之一,但为了简单起见,我不会提及其他对象)。为了计算 View 矩阵,我需要相机的位置和目标的位置,所以我可以向我的程序解释:“相机放在这里,从这里看这个立方体”。如果立方体碰巧四处移动,相机的视角也会自动改变。
到目前为止,一切都很好:有一个 Camera 类依赖于 Cube 类,还有一个 Cube 类不依赖任何东西(在这个例子中)。
当我需要绘制一个立方体或任何东西时遇到了问题——为了绘制一些东西,在所需的值中,它是相机的视图矩阵;这就是我刚刚在第一段中计算的那个。本质上,这意味着当我开始在屏幕上绘制东西时,Cube 类也变得依赖于 Camera 类,它们现在相互依赖。这意味着我要么:
- 需要将Camera类的View矩阵字段设为静态,这样我就可以直接从Cube类中访问了。
- 需要在 Cube 类中创建一个方法(例如 SetView),然后我可以从 Camera 类中调用该方法(因为我已经有它的引用)。
- 需要在外部范围内保留视图矩阵。
- 需要建立双向依赖关系。
但是,我不喜欢其中任何一个:
- 处理多个视图的摄像头更多(目前屏幕上有 3 个),并且可能更多(或更少)。
- 这会使代码略微(有时,也许,非常)不可读——例如,当我绘制立方体时,不太清楚 View 矩阵的来源,您只需使用它,不要回头.
- 我会从相机类访问外部作用域,或者外部作用域会访问相机,我不喜欢这样,因为外部作用域仅用于处理执行机制。
- 我喜欢将我的引用字段保持为“只读”,因为它目前在这个系统中无处不在 - 引用在构造函数中设置,并且仅用于从被引用的类中获取数据。
而且,如果我没有说清楚,让我重复一下,有多个 Camera 对象,以及多个 Cube 对象;而任何相机可能会或可能不依赖于任何立方体,但通常至少有一个相机依赖于一个立方体。
任何建议将不胜感激:)
【问题讨论】:
标签: c# class xna dependencies bidirectional