我正在使用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
如您所见,我尝试过使用ENTIRE文件位置。它找到该文件,但在调用LoadContent()方法时抛出异常,并显示“无法打开文件blade_of_light3。”
我没有得到关于转义路径或类似的任何错误,我已经将这种文件路径用于其他图像,并且它们工作正常。在这个类中,在这个loadContent方法中,它们将无法工作。
答案 0 :(得分:5)
Content.Load方法不加载文件,它加载专门的内容或资产。看看this。 您无法直接加载文件,只能加载资源。这些资产是通过content pipeline生成的。 这主要是为内容提供一个抽象层。因为XNA是独立于平台的,并且在一台机器上您可能使用更大的图像或不同的图像,所以您只需要更改管道中的资产并重用代码。
答案 1 :(得分:3)
只需添加到dowhilefor's excellent answer,如果您要加载原始.jpg
文件(或.png
),就可以这样做:
using(var s = File.OpenRead(fileName))
{
Texture2D texture = Texture2D.FromStream(GraphicsDevice, s);
}
与使用ContentManager
加载内容时的不同,在这种情况下你“拥有”它。这意味着您有责任在Dispose()
。{/ p>上调用UnloadContent
与不同,当您浏览内容管道(使用默认设置)时,您加载的纹理将不具有预乘-α。您需要自己应用预乘,或者使用BlendState.NonPremultiplied
进行渲染。
当然,除非您因某些原因无法(例如:您从互联网上下载图片,或者让最终用户选择它们),您应该使用内容管道