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 の例ではありません :-)

4

1 に答える 1

1

この記事を読む必要があると思いますコンテンツ パイプライン MSDN

ここがポイントです。Visual Studio で F5 キーを押すと、プロジェクトとアセットがコンパイルされます。

XNA を使用Game.Content.Load<Texture2D>すると、.xnb を見つけようとします。

Visual Studio がプロジェクトをコンパイルしているとき、彼はあなたの .xnb を特定の forlder に作成しています。

実際には、.png または .jpg ファイルをゲームに直接ロードしているわけではありません :)

まず、新しいアセットを .xnb ファイルにコンパイルする必要があります (シリアル化プロセスの一種)。

そして、ここに同様の質問があります https://gamedev.stackexchange.com/

于 2012-12-05T10:13:09.833 に答える