2

我正在尝试为我的游戏创建一个模块,我的想法是能够在我的所有游戏中使用它。

所以我的 lib 项目有自己的内容文件夹,一切都很好,但它与宿主项目的内容文件夹崩溃。

这是我的组件(它是它自己的项目,我参考链接到主机项目(手机应用程序)):

namespace FPSComponent
{
    public class FPS : DrawableGameComponent
    {
        private SpriteBatch spriteBatch;

        SpriteFont normal;
        Texture2D headerBackground;

        public FPS(Game game)
            : base(game)
        {
            spriteBatch = new SpriteBatch(Game.GraphicsDevice);

            string tempRootDirectory = Game.Content.RootDirectory;
            Game.Content.RootDirectory = "FPSComponentContent";

            headerBackground = Game.Content.Load<Texture2D>("header-background");

            normal = Game.Content.Load<SpriteFont>("normal");

            //Game.Content.RootDirectory = tempRootDirectory; <-- does not work
        }

        public override void Update(GameTime gameTime)
        {
            // TODO: Add your update logic here

            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime)
        {
            //GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

            spriteBatch.Draw(headerBackground, Vector2.Zero, Color.White);

            spriteBatch.DrawString(normal, "FPS COMPONENT", new Vector2(20, 20), Color.White);

            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}

我试图做的是创建一个独立的组件来导入我的项目,这主要是为了学习目的......而不是一个工作的 FPS 示例 atm :-)

4

1 回答 1

1

我认为您必须阅读这篇文章Content Pipeline MSDN

重点是,当您在 Visual Studio 上按 F5 时,它将编译您的项目和您的资产。

通过使用Game.Content.Load<Texture2D>XNA 将尝试找出一个 .xnb

当 Visual Studio 编译您的项目时,他正在将您的 .xnb 创建到特定的文件夹中。

您并没有真正将 .png 或 .jpg 文件直接加载到您的游戏中:)

您必须首先将新资产编译成 .xnb 文件(一种序列化过程)

这是一个类似的问题https://gamedev.stackexchange.com/

于 2012-12-05T10:13:09.833 回答