无法在XNA(vb.net)中为我的游戏启动调试

时间:2016-04-05 23:23:07

标签: vb.net xna

我已经在XNA(vb.net)的一个游戏项目工作了几年,但我没有接受过正规教育,所以我在尝试时学习。这意味着我可能会编写代码效率低下或完全错误(很好地考虑)。对我的问题:

今天,当我第一次启动调试时,在绘制第一帧之前出现错误(出现白色窗口)。它突出显示我的game.Run(),错误为System.OutOfMemoryException。当我把它复制到剪贴板时,它说:

System.OutOfMemoryException was unhandled
HResult=-2147024882
Message=Exception of type 'System.OutOfMemoryException' was thrown.
Source=WindowsGame2
StackTrace:
     at WindowsGame2.Game1.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.WindowsGameHost.RunOneFrame()
     at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object   sender, EventArgs e)
     at   System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNat  iveMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
     at   System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.Unsafe  NativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID,   Int32 reason, Int32 pvLoopData)
     at   System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32   reason, ApplicationContext context)
     at   System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason,   ApplicationContext context)
     at System.Windows.Forms.Application.Run(Form mainForm)
     at Microsoft.Xna.Framework.WindowsGameHost.Run()
     at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
     at Microsoft.Xna.Framework.Game.Run()
     at WindowsGame2.Program.Main(String[] args) in C:\Projects  \WindowsGame2\WindowsGame2\WindowsGame2\Program.vb:line 9
InnerException:     

我不记得当天对代码进行任何特定更改,而只是简单地添加更多内容。我知道这很模糊,但我真的可以想到这一点。我一直在挖掘每个论坛,但无济于事。 我能提供哪些信息可能有助于理解问题? 我感谢任何帮助! /基督教

编辑: 我尝试优化代码(并且相当多),所以它应该运行得更顺畅。例如,我现在使用的循环比以前少得多。 这个问题似乎并不是在运行它时,而是在它启动时。现在我开始大约是我按下调试的1/5。

1 个答案:

答案 0 :(得分:0)

看起来堆栈跟踪指向Draw方法。确保不会在每一帧(绘制或更新)中不必要地重新创建对象,因为这将每秒发生60次(假设为60fps)。

因为你说它只发生了一些时间,而其他时候它没有发生,所以也看看你是否可以减少启动时创建的内容。确保只在需要时创建所需内容。

如果堆栈跟踪是正确的并且问题在您的Draw方法中是特定的,请确保您不是每帧都不必要地重新创建纹理,并确保在完成后对任何具有它的对象调用.Dispose()它