在 Xna/MonoGame 中将纹理编辑为二维数组
Edit texture as 2D array in Xna/MonoGame
我想通过将较小的纹理粘贴为图块来按程序生成 texture2D
,我在 Python 和 MatLab 中做过类似的事情,但不知道如何在 MonoGame 中执行此操作。
This question 与我需要做的类似,但它在 Draw()
方法中生成纹理,在我的情况下这可能会影响性能。
像一样,我想要生成纹理的东西returns它,所以我可以将它初始化为一个字段而不是每次在[=中重新生成纹理12=].
但是我不知道如何编辑一个texture2D
,SetData()
method for Texture2D
比较混乱,新数据是[=17类型=],如何将另一个 Texture2D
作为 T[]
传递? Int32
参数在做什么?
T
参数很方便,也就是说,您可以传递原始字节而不是颜色。
简而言之,只要坚持 Color[]
for T[]
,框架将处理所有细节,例如使用原始字节计算 stride/pitch 等。
对于您的情况,您可以执行以下操作:
- 使用
GetData
从源图块中获取颜色
- 使用
SetData
设置目标纹理中源图块大小的区域矩形
要在 Draw
之外初始化它,我想 LoadContent
可能是个好地方,因为此时 GraphicsDevice
不应该为 null。
如果你必须在 Draw
中执行此操作,请使用简单的 bool NeedsRefresh
作为守卫,检查它是否为真,如果是,则生成你的东西并将其设置为假;代码块只会 运行 一次。
我想通过将较小的纹理粘贴为图块来按程序生成 texture2D
,我在 Python 和 MatLab 中做过类似的事情,但不知道如何在 MonoGame 中执行此操作。
This question 与我需要做的类似,但它在 Draw()
方法中生成纹理,在我的情况下这可能会影响性能。
像
但是我不知道如何编辑一个texture2D
,SetData()
method for Texture2D
比较混乱,新数据是[=17类型=],如何将另一个 Texture2D
作为 T[]
传递? Int32
参数在做什么?
T
参数很方便,也就是说,您可以传递原始字节而不是颜色。
简而言之,只要坚持 Color[]
for T[]
,框架将处理所有细节,例如使用原始字节计算 stride/pitch 等。
对于您的情况,您可以执行以下操作:
- 使用
GetData
从源图块中获取颜色 - 使用
SetData
设置目标纹理中源图块大小的区域矩形
要在 Draw
之外初始化它,我想 LoadContent
可能是个好地方,因为此时 GraphicsDevice
不应该为 null。
如果你必须在 Draw
中执行此操作,请使用简单的 bool NeedsRefresh
作为守卫,检查它是否为真,如果是,则生成你的东西并将其设置为假;代码块只会 运行 一次。