0

背景

我正在与一位朋友讨论在 2D 数组中引用我正在设计的元素的正确方法。Point我对使用 XNA和结构体作为数组引用不满意,Vector2因为它们的属性被标记为XY.

我为这些创建了我的结构,ArrayPointArrayVector2调用了我自己的属性IJ. 我的朋友认为这是在浪费时间,但是,我不喜欢交换XandY引用,因为我的数学背景一直教我使用 i 和 j 作为矩阵,例如使用myArray[i, j]代替myArray[y, x].

处理这种情况的最佳方法是什么?

这仅仅是交换 x 和 y 的情况吗?或者创建你自己的结构来处理你喜欢的?这完全取决于个人喜好,因为这几乎都是任意的?

4

3 回答 3

2

听你朋友的!

这是一个坏主意的原因有很多,这里有一些:

  • 你的数学背景可能会说ij。但是对于映射到 2D 空间的数组(例如:瓦片图,而不是矩阵),那么x实际上y是更可取的,因为它们传达了语义,使您的代码更容易理解。(即:你有 X 和 Y 轴,而不是 I 和 J)。

  • (通常在语义上更有意义的情况下,无论如何您都不会将索引器存储在结构中 - 它们只是临时的局部变量。ij

  • 如果没有真正的理由,更少的代码总是比更多的代码更可取。编写和测试代码会占用宝贵的时间。使用其他人的代码(如内置的 XNA 类型)可以节省您的时间。

  • 有一天你可能会写一些实用函数,它需要一个Point. 如果您有两个版本,Point那么您很可能最终得到该功能的两个版本。更多代码,更糟糕的是:重复代码!

  • “不是在这里发明的”对于程序员来说是一个非常非常非常糟糕的习惯。学习使用其他人的代码(只要它有效——在这种情况下,它确实有效)。

  • 没有其他人这样做。你的代码会让所有试图使用它的人感到困惑和烦恼。

  • 小的性能会不必要地复制周围的东西。(加上其他一些对性能有轻微影响的深奥的东西。)

(另外:用(浮点)索引到数组Vector2有点奇怪。)

于 2012-08-16T06:21:57.673 回答
1

这不取决于个人喜好,因为您将必须转换为/从您的结构转换以将数据传递给 XNA 库方法。您将产生转换成本,这无疑是非常小的,但如果在循环中重复执行,则可能会增加相当大的成本。

当然,SpriteFont.MeasureString() 返回一个由 X 和 Y 成员而不是 Width 和 Height 组成的数据结构是很愚蠢的,但是处理这种奇怪的东西比尝试对抗它更容易。

我的建议是尝试使用 x 和 y 作为索引并避免额外的开销。

于 2012-08-15T18:55:20.640 回答
0

我认为你正在做的很好。我唯一不建议这样做的情况是,如果您增加了显着的复杂性。如您所知,XNA 软件和其他必须处理大量计算和图形的软件如果效率低下,可能会因微小的变化而陷入困境。但是,您所做的只是帮助您,不应该增加所说的复杂性。我会说去吧。

于 2012-08-15T18:54:31.343 回答