Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建图像并将其保存以供以后在XNA中绘制为纹理?_C#_Image_Xna_Geometry - Fatal编程技术网

C# 如何创建图像并将其保存以供以后在XNA中绘制为纹理?

C# 如何创建图像并将其保存以供以后在XNA中绘制为纹理?,c#,image,xna,geometry,C#,Image,Xna,Geometry,在我的游戏中,我需要画一个由正方形组成的圆圈,大小与游戏瓷砖相同(圆圈由正方形组成)。我可以在每一帧中以锯齿状圆圈的形式绘制单色方形纹理,但它会消耗大量资源。我想做的是在内存中的某个地方画一次,然后保存下来,然后再画每一帧 我可以自己画一个圆圈,并把它作为一个现成的纹理,但我的圆圈并不总是一样的。它在整个游戏中有不同的大小(有一半的时间它实际上不是一个圆,但我有一个表示在哪里绘制的算法),所以它必须通过编程来绘制。首先,将圆渲染为自定义的RenderTarget2D。可以按如下方式设置自定义渲染

在我的游戏中,我需要画一个由正方形组成的圆圈,大小与游戏瓷砖相同(圆圈由正方形组成)。我可以在每一帧中以锯齿状圆圈的形式绘制单色方形纹理,但它会消耗大量资源。我想做的是在内存中的某个地方画一次,然后保存下来,然后再画每一帧


我可以自己画一个圆圈,并把它作为一个现成的纹理,但我的圆圈并不总是一样的。它在整个游戏中有不同的大小(有一半的时间它实际上不是一个圆,但我有一个表示在哪里绘制的算法),所以它必须通过编程来绘制。

首先,将圆渲染为自定义的
RenderTarget2D
。可以按如下方式设置自定义渲染目标:

GraphicsDevice.SetRenderTarget(renderTarget);
texture = (Texture2D)renderTarget;
将圆渲染到渲染目标后,将其投射到
Texture2D
,如下所示:

GraphicsDevice.SetRenderTarget(renderTarget);
texture = (Texture2D)renderTarget;

阅读更多信息:

请注意,在XNA 4.0中,
RenderTarget2D
是一个
Texture2D
(您可以这样使用它),而强制转换它实际上没有任何作用。除非您实际将其复制到新的
Texture2D
(使用
GetData
SetData
的组合)并使用它,否则您的
RenderTarget2D
可能会丢失(触发其
ContentLost
事件并将
IsContentLost
设置为true)。