1

XNA(C#で記述)を使用して作成したWindowsGameLibraryがあります。これには、Gameクラスの独自の拡張機能が含まれています。何らかの理由で、オーバーライドされたバージョンのLoadContentが呼び出されることはありません。フォーラムで、base.Initialize()を最後に追加せずに誤ってInitializeをオーバーライドしたことが原因である可能性があることを読みましたが、それを確認しても機能しません。Gameの拡張子を含む名前空間は、「Program」クラスを含む実際のWindowsGameプロジェクトの名前空間とは別のものであることに注意してください。ただし、それは問題ではないと思います。以下は私のコードです:

    public AttunedGame()
    {
        // Singleton
        if (Instance == null) Instance = this;
        this.currentArea = "";
    }
    protected override void Initialize()
    {
        // Managers
        graphics = new GraphicsDeviceManager(this);
        currentGameTime = new GameTime(new TimeSpan(0), new TimeSpan(0));

        // Areas
        areas = new CollectibleCollection<Area>();
        foreach (string a in Directory.EnumerateDirectories(@"content\areas"))
        {
            areas.Add(new Area(a));
            areas.Get(Collectible.IDFromPath(a)).Initialize();
        }

        base.Initialize();
    }
    protected override void LoadContent()
    {
        spriteBatch = new AnimatedSpriteBatch(this.GraphicsDevice);
    }

    // Main loop methods
    protected override void Update(GameTime gameTime)
    {
        currentGameTime = gameTime;

        CurrentArea.Update();

        base.Update(gameTime);
    }
    protected override void Draw(GameTime gameTime)
    {
        currentGameTime = gameTime;

        SpriteBatch.Begin();
        CurrentArea.Draw();
        SpriteBatch.End();

        base.Draw(gameTime);
    }

ここに示すすべてのメソッドにブレークポイントを設定して、プログラムフローがどこに向かっているのかを確認しました。最初にコンストラクターにヒットし、次にInitialize(最後まで一度に1行ずつステップ実行しました)、次にUpdate、次にDrawに移動しました。しばらくループさせても、LoadContentに到達することはありませんでした。

助けてくれてありがとう。

4

1 に答える 1

1

実際には、コンストラクター内で GraphicsDeviceManager を作成する必要があります。行を移動します。

  graphics = new GraphicsDeviceManager(this);

中から

  protected override void Initialize()

中にいること

  public AttunedGame()

私の推測では、XNA 内の何かで、コンテンツをロードする前にグラフィックス デバイス マネージャーを初期化する必要があると思われます (サービス コンテナーは、テクスチャなどのコンテンツをロードできるようにグラフィックス デバイスが作成されていることを期待している可能性があります)。LoadContent は実際には基本クラス Initialize から呼び出されますが、これはおそらく何らかの理由で失敗しています。実際には何らかの例外をスローする必要がありますが、おそらくそのようなケースは想定していませんでした。

それが役立つことを願っています!

于 2012-10-29T19:48:51.763 に答える