0

私のxnaゲームには、この「不正な」System.InvalidOperationExceptionがありますが、これは時々しか発生せず、ランダムにトリガーされるか、少なくとも私の制御入力の範囲外でトリガーされるようです。スタートを押して最初のメニュー画面を読み込んだ後 (GameStateManagement サンプルをゲームのベースとして使用しました)、ゲームは、常にではありませんが、foreach の「in」部分で System.InvalidOperationException をスローします (GameScreen 画面)。メソッドの完全なコード:

            /// <summary>
    /// Tells each screen to draw itself.
    /// </summary>
    public override void Draw(GameTime gameTime)
    {

        foreach (GameScreen screen in screens) //exception thrown at the "in" part
        {
            if (screen.ScreenState == ScreenState.Hidden)
                continue;

            screen.Draw(gameTime);
        }
    }

私は、例外がスローされるときとそうでないときとで何も違うことをしていないので、何がこの例外をトリガーするのかについて正直にわかりません。これが役立つかどうかは正確にはわかりませんが、これは例外の詳細です

   at System.Collections.Generic.List`1.Enumerator.MoveNext()
   at GameStateManagement.ScreenManager.Draw(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Draw(GameTime gameTime)
   at GameStateManagement.GameStateManagementGame.Draw(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.DrawFrame()
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e)
   at Microsoft.Xna.Framework.GameHost.OnIdle()
   at Microsoft.Xna.Framework.XboxGameHost.RunOneFrame()
   at Microsoft.Xna.Framework.XboxGameHost.Run()
   at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
   at Microsoft.Xna.Framework.Game.Run()
   at GameStateManagement.Program.Main()
}   System.Exception {System.InvalidOperationException}

これはコールスタックです:

>   GameStateManagementSample.exe!GameStateManagement.ScreenManager.Draw(Microsoft.Xna.Framework.GameTime gameTime) Line 338 + 0x33 bytes   C#
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.Draw(Microsoft.Xna.Framework.GameTime gameTime) + 0x4d bytes  
GameStateManagementSample.exe!GameStateManagement.GameStateManagementGame.Draw(Microsoft.Xna.Framework.GameTime gameTime) Line 89 + 0x7 bytes   C#
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.DrawFrame() + 0x6a bytes  
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.Tick() + 0x2a9 bytes  
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.HostIdle(object sender, System.EventArgs e) + 0x6 bytes   
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.GameHost.OnIdle() + 0x19 bytes 
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.XboxGameHost.RunOneFrame() + 0xc bytes 
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.XboxGameHost.Run() + 0x1b bytes    
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.RunGame(bool useBlockingRun) + 0x9c bytes 
Microsoft.Xna.Framework.Game.dll!Microsoft.Xna.Framework.Game.Run() + 0x7 bytes 
GameStateManagementSample.exe!GameStateManagement.Program.Main() Line 108 + 0x6 bytes   C#

ありがとう!イヴァトリックス。

4

1 に答える 1

1

ゲーム コードがscreens、考慮していないコード パスで変更されているようです。IEnumerator.MoveNextに関するドキュメントをご覧ください。

列挙子の作成後にコレクションが変更されました。

于 2012-12-19T06:08:49.997 に答える