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方法中,它们不起作用。

C#XNA 4.0例外:;无法打开文件""

Content.Load方法不加载文件,而是加载专门的内容或资产。看看这个。不能直接加载文件,只能加载资源。这些资产是通过内容管道生成的。这主要是为内容提供一个抽象层。因为XNA是独立于平台的,并且在一台机器上你可能会使用更大的映像或不同的映像,所以你只需要更改管道中的资产,就可以重用代码。

为了增加dowhilefor的优秀答案,如果你想加载一个原始的.jpg文件(或.png(,你可以这样做:

using(var s = File.OpenRead(fileName))
{
    Texture2D texture = Texture2D.FromStream(GraphicsDevice, s);
}

不同的是,当您使用ContentManager加载某个东西时,在这种情况下您"拥有"它。这意味着您负责在UnloadContent中调用它上的Dispose()

此外,不同的是,当您通过内容管道(使用默认设置(时,加载的纹理不会具有预乘alpha。您需要自己应用预乘,或者使用BlendState.NonPremultiplied进行渲染。

当然,除非您出于某种原因无法下载(例如:您从互联网下载图像,或者您让最终用户挑选图像(,否则您应该使用内容管道