0

GameStateManagement を使用していますが、ゲームのメモリに問題があります。ゲームの各セグメントを別の画面として持っています。ロゴ用の画面、本編用の画面などがあります。画面の管理が間違っていたと思いますが、問題に関する情報を見つけるのに苦労しています。

このロゴ画面がタイトル メニュー画面に移動すると、このロゴ画面のメモリ リソースが解放されないようで、すべての画面でその問題が発生しているようで、メモリがかなりスタックし始めます。UnloadContent を正しく実行していますか? UnloadContent の下のテクスチャなどで Dispose() を呼び出す必要がありますか? 画面を正しく削除していますか? 私が正しくやっていないことについて何か考えはありますか?

ここに私のロゴ画面があります:

namespace Tower_Defense
{
    class Logo : GameScreen
    {
        Tower_Defense curGame;
        GraphicsDeviceManager graphics;
        AudioManager audioManager;
        Texture2D logoTexture;
        int gamecycles;

        public Logo(Tower_Defense game, GraphicsDeviceManager g, AudioManager am)
        {
            curGame = game;
            audioManager = am;
            graphics = g;
            EnabledGestures = GestureType.Tap;
        }

        public override void LoadContent()
        {
            base.LoadContent();

            logoTexture = Load<Texture2D>("Textures/Backgrounds/logo");

            gamecycles = 0;
        }

        public override void UnloadContent()
        {
            base.UnloadContent();
        }

        public override void Draw(GameTime gameTime)
        {
            ScreenManager.SpriteBatch.Begin();

            ScreenManager.SpriteBatch.Draw(logoTexture, Vector2.Zero, Color.White);

            ScreenManager.SpriteBatch.End();
        }

        public override void Update(GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen)
        {
            gamecycles++;

            if (gamecycles >= 60)
            {
                ScreenManager.AddScreen(new TitleScreen(curGame, graphics, audioManager, false), null);
                this.UnloadContent();
                ScreenManager.RemoveScreen(this);
            }

            base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
        }
    }
}
4

1 に答える 1

0

ContentManagerロードするすべてのリソースを「所有」します。自分で荷降ろしすることはできません。それらをアンロードできるのはContentManager.Unload、その特定のマネージャーがロードしたすべてのものをアンロードする場合のみです。(詳細 . )

したがって、画面ごとにリソースをロードおよびアンロードする場合は、ContentManager画面ごとに のインスタンスを作成する必要があります。

于 2012-10-25T08:41:26.987 に答える