我的游戏在运行 10-15 秒后收到以下警告/错误消息,即使在没有与游戏交互的情况下也会出现这种情况:
An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.Drawing.dll
Additional information: The operation completed successfully
我想知道是否需要调用 Dispose()
方法来删除正在加载时未使用的对象,即使它们已从游戏世界中删除?
我将所有对象存储为列表(如下所示)
class Items
{
public static List<Obj> objList = new List<Obj>();
public static void Initialize()
{
//The Player
objList.Add(new Player(new Vector2(50, 50)));
//The Enemies
objList.Add(new Enemy(new Vector2(500, 400)));
objList.Add(new Enemy(new Vector2(600, 200)));
//The Collectibles
objList.Add(new BlueBall(new Vector2(300, 400)));
objList.Add(new GreenBall(new Vector2(350, 100)));
objList.Add(new OrangeBall(new Vector2(65000, 250)));
objList.Add(new PinkBall(new Vector2(100, 400)));
objList.Add(new RedBall(new Vector2(600, 400)));
objList.Add(new YellowBall(new Vector2(500, 250)));
}
然后我在 Game1 类中调用 Items.Initialize
我目前也有一个碰撞方法,一旦一个对象与另一个对象发生碰撞,就会调用该方法,我认为这可能会导致问题,但我不是 100%。就我的游戏而言,我目前仅将对象状态设置为 = alive = false;
以便“杀死”它们并将它们从屏幕上删除,这可以在下面的示例中看到玩家和敌人的碰撞:
//Collision with enemy
Enemy enemy = CheckCollisionAgainst<Enemy>();
if (enemy != null)
{
gameOver.Play();
alive = false;
}
我现在一直遇到这个错误,并且无法找到解决方案来阻止它发生。正如我之前所说,它发生在游戏运行 10-15 秒后,因此在修复此错误之前我无法继续使用任何其他功能。
感谢您的帮助并提前致谢。
最佳答案
我发现了一些有趣的信息,看起来 try catch 不会为你做任何事情,因为它可能是你要求 c# 生成的图形数量。您必须降低显示的图形质量或减少代码中需要图形的对象数量,请参阅:
System.ComponentModel.Win32Exception: The operation completed successfully
看来您不是唯一遇到此问题的人。
人们在遇到同样的异常(exception)之前通常对图形有很高的要求,优化你的代码是你所需要的,设法减少游戏所需的内存并不是一个简单的任务。勇气我的 friend !
ps。从 dispose() 开始将是一个好主意;)
关于c# - 10秒后出现未处理的异常错误,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31190660/