我在使用Vector3类时遇到了一些问题,主要是因为它是一个结构,另外还因为它没有像组件被更改时那样引发事件。
最终,我希望能够写出_camera.Position.Z += 0.1f;
SharpDX.Vector3
这是不可能的,因为它是一个结构,我无法修改它的组件(因为在调用_camera.Position
时会返回一个副本。)
此外,我没有像ComponentsChanged
那样更新我的相机视图矩阵的事件。
我决定围绕Vector3 struct 创建一个包装类,它也提供了这样的事件。由于调用_camera.Position
会给我一个引用,我也可以直接修改Z
组件。
但是,出于性能原因,我怀疑这是不是一个好主意。
答案 0 :(得分:2)
使用结构来存储向量是正确的格式,因为它在空间上更有效,并直接映射到底层C ++ API预期/返回的本机格式。
因此,对结构上的每个组件更改引发事件是不好的,也是不常见的。结构是轻量级数据,节省空间,在D3D的情况下,用于本机互操作。通常在持有值类型的类(例如相机组件)上引发事件。这是一般在.NET中有效的建议,在整个.NET框架中广泛使用