C#XNA 4.0例外:;无法打开文件""
本文关键字:quot 文件 0例外 C#XNA | 更新日期: 2023-09-27 18:01:07
我在XNA 4.0 Game Studio(C#(中工作,我正在尝试使用LoadContent((方法加载图像。我已经在这个游戏中加载了许多图像文件,它们都能100%正常工作,但由于某种原因,XNA不会打开我的loadContent方法中的文件。方法如下:
protected override void LoadContent()
{
//spriteBatch = new SpriteBatch(GraphicsDevice);
//Sets up an array of textures to be used in the Icon class
Texture2D[] icons = new Texture2D[24];
#region Loading talent textures
//These are all of the icons that need to be loaded for the talents
//Paladin
icons[0] = Content.Load<Texture2D>(@"C:'Users'Student'Desktop'Dropbox'Public'platformer'Platformer'Content'Talents'blade_of_light3.jpg");
icons[1] = Content.Load<Texture2D>("Talents''divine_grace");
icons[2] = Content.Load<Texture2D>("Talents''divine_storm");
icons[3] = Content.Load<Texture2D>("Talents''hammer_of_the_righteous");
icons[4] = Content.Load<Texture2D>("Talents''healing_hands");
icons[5] = Content.Load<Texture2D>("Talents''heavenly_fury");
icons[6] = Content.Load<Texture2D>("Talents/momentum_of_light");
icons[7] = Content.Load<Texture2D>("Talents/retribution");
icons[8] = Content.Load<Texture2D>("Talents/righteous_fury");
icons[9] = Content.Load<Texture2D>("Talents/sanctuary");
icons[10] = Content.Load<Texture2D>("Talent/searing_light");
icons[11] = Content.Load<Texture2D>("Talent/wrath_of_the_heavens");
//Warrior
icons[12] = Content.Load<Texture2D>(@"Talents'bloodstorm");
icons[13] = Content.Load<Texture2D>(@"Talents'bloodthirst");
icons[14] = Content.Load<Texture2D>(@"Talents'die_by_the_sword");
icons[15] = Content.Load<Texture2D>(@"Talents'furious_blades");
icons[16] = Content.Load<Texture2D>(@"Talents'unleash_rage");
icons[17] = Content.Load<Texture2D>(@"Talents'lifeblood");
icons[18] = Content.Load<Texture2D>(@"Talents'red_like_my_rage");
icons[19] = Content.Load<Texture2D>(@"Talents'eternal_thirst");
icons[20] = Content.Load<Texture2D>(@"Talents'bladesurge");
icons[21] = Content.Load<Texture2D>(@"Talents'bathed_in_blood");
icons[22] = Content.Load<Texture2D>(@"Talents'bladerunner");
icons[23] = Content.Load<Texture2D>(@"Talents'bloodfury");
icons[24] = Content.Load<Texture2D>(@"Talents'grapple_chain");
#endregion
正如您所看到的,我已经尝试使用整个文件位置。它找到文件,但在调用LoadContent((方法时抛出异常,并表示"无法打开文件blade_of_light3"。
我没有得到任何关于转义路径或类似的错误,我已经为其他图像使用了这种文件路径,它们工作得很好。只是在这里,在这个类中,在这个loadContent方法中,它们不起作用。
Content.Load方法不加载文件,而是加载专门的内容或资产。看看这个。不能直接加载文件,只能加载资源。这些资产是通过内容管道生成的。这主要是为内容提供一个抽象层。因为XNA是独立于平台的,并且在一台机器上你可能会使用更大的映像或不同的映像,所以你只需要更改管道中的资产,就可以重用代码。
为了增加dowhilefor的优秀答案,如果你想加载一个原始的.jpg
文件(或.png
(,你可以这样做:
using(var s = File.OpenRead(fileName))
{
Texture2D texture = Texture2D.FromStream(GraphicsDevice, s);
}
与不同的是,当您使用ContentManager
加载某个东西时,在这种情况下您"拥有"它。这意味着您负责在UnloadContent
中调用它上的Dispose()
。
此外,与不同的是,当您通过内容管道(使用默认设置(时,加载的纹理不会具有预乘alpha。您需要自己应用预乘,或者使用BlendState.NonPremultiplied
进行渲染。
当然,除非您出于某种原因无法下载(例如:您从互联网下载图像,或者您让最终用户挑选图像(,否则您应该使用内容管道。