在 Xna/MonoGame 中将纹理编辑为二维数组

Edit texture as 2D array in Xna/MonoGame

我想通过将较小的纹理粘贴为图块来按程序生成 texture2D,我在 Python 和 MatLab 中做过类似的事情,但不知道如何在 MonoGame 中执行此操作。

This question 与我需要做的类似,但它在 Draw() 方法中生成纹理,在我的情况下这可能会影响性能。

一样,我想要生成纹理的东西returns它,所以我可以将它初始化为一个字段而不是每次在[=中重新生成纹理12=].

但是我不知道如何编辑一个texture2DSetData() method for Texture2D比较混乱,新数据是[=17类型=],如何将另一个 Texture2D 作为 T[] 传递? Int32 参数在做什么?

T 参数很方便,也就是说,您可以传递原始字节而不是颜色。

简而言之,只要坚持 Color[] for T[],框架将处理所有细节,例如使用原始字节计算 stride/pitch 等。

对于您的情况,您可以执行以下操作:

  • 使用GetData从源图块中获取颜色
  • 使用SetData设置目标纹理中源图块大小的区域矩形

要在 Draw 之外初始化它,我想 LoadContent 可能是个好地方,因为此时 GraphicsDevice 不应该为 null。

如果你必须在 Draw 中执行此操作,请使用简单的 bool NeedsRefresh 作为守卫,检查它是否为真,如果是,则生成你的东西并将其设置为假;代码块只会 运行 一次。