用图像填充Texture2D的最快方法是什么?
在/Images/image.png下,我有所需的图像。
我现有的代码只是用白色填充纹理。怎样才能让它渲染图像呢?
Texture2D texture = new Texture2D(graphics.GraphicsDevice, this.Width, this.Height, false, SurfaceFormat.Color);
Color[] colors = new Color[this.Width * this.Height];
for (int j = 0; j < colors.Length; j++)
colors[j] = color;
texture.SetData(colors);也许我做错了,但是在屏幕上动态显示图像的最简单/最快的方法是什么?
更新
我更改了我的代码以使用ContentManager。
ContentManager contentManager = (Application.Current as App).Content;
Texture2D texture = contentManager.Load<Texture2D>("/Images/block.png");
contentManager.Load<Texture2D>(@"Images/block.png")抛出“找不到文件”。
contentManager.Load<Texture2D>(@"/Images/block.png")引发“加载"\Images\block.png”时出错。无法打开文件。“
发布于 2012-12-13 06:13:48
最简单的方法是只依赖于建议的内容管道。
在创建XNA项目时,应该有两个项目: MyGame和MyGame (Content)。右键单击内容并选择"Add Files“。这将允许您导入图像,这些图像可以很容易地通过路径并编译成.xnb格式。我相信这是为了让事情变得更快一点。
完成此操作后,您需要一个ContentManager对象。理想情况下,您将在您的游戏类中使用Content -它已经为您设置好了。但您可以使用以下命令创建一个:
ContentMananger content = new ContentManager(Services, "Content");其中Services来自您的游戏类(或带有GraphicsDeviceService的IServiceProvider )。第二个参数是内容文件夹的根目录。
这将允许您通过以下方式从内容管道加载任意数据格式:
content.Load<Texture2D>("myTexture");(请注意,不包括文件扩展名。)
为了简单起见,我建议你在内容项目中创建一个"Images“文件夹,因为你最终会有大量的资源,而且它更容易组织。你也可以有一个SFX,音乐,XML等文件夹来处理你的游戏需要的所有数据类型。
所以你会这样做:
Texture2D myTexture = content.Load<Texture2D>("images/myTexture");
SpriteBatch spriteBatch = new SpriteBatch(graphics.GraphicsDevice);(请注意,这些对象显然需要在类范围内可见)。这将发生在用于加载文件的初始化代码中。
在此之后,您将使用Draw方法实际绘制sprite
public override void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Begin();
spriteBatch.Draw(myTexture, new Vector2(320, 240), Color.White);
spriteBatch.End();
}你的精灵被神奇地画出来了。
您所做的实质上是以编程方式定义一个图像,然后绘制它。虽然他们在某些地方有应用程序,但可能不是你想要的。
发布于 2012-12-13 05:49:24
如果你想在运行时加载一个图片,你可以使用这段代码:
string file = @"Content/images/1.png"; // @ sign is to treat '/' as a character, not a control symbol
FileStream fs = new FileStream(file, FileMode.Open);
Texture2D texture = Texture2D.FromStream(GraphicsDevice, fs);
fs.Dispose();…然后像这样使用texture:
spritebatch.Draw(texture, new Vector2(123, 456), Color.White);要使用FileStream,您可能需要在游戏类中添加using System.IO;。
这种方法不被认为是标准做法,它可能会导致alpha通道出现问题,要解决这些问题,您需要使用不同的alpha混合状态。你可以在this question上找到更多关于它的信息。
发布于 2012-12-13 10:30:10
如果未使用content pipeline添加纹理,请使用Texture2D.FromStream()
FileInfo imageFile = new FileInfo("Images\\image.png");
Texture2D image = Texture2D.FromStream(GraphicsDevice, imageFile.OpenRead());如果你加载了很多纹理,当你不再需要它们的时候,你可能想要处理它们,。
https://stackoverflow.com/questions/13848893
复制相似问题