我的游戏运行10-15秒后,我一直收到以下警告/错误消息,这甚至发生在没有与游戏互动时:
未处理的类型' System.ComponentModel.Win32Exception'发生在System.Drawing.dll
中附加信息:操作成功完成
我想知道我是否需要调用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;
才能杀死&#39;将它们从屏幕上删除,这可以在下面看到一个显示玩家和敌人碰撞的例子:
//Collision with enemy
Enemy enemy = CheckCollisionAgainst<Enemy>();
if (enemy != null)
{
gameOver.Play();
alive = false;
}
我现在一直坚持这个错误,并且无法找到阻止它发生的解决方案。正如我之前所说,它发生在游戏运行10-15秒后,所以在修复此错误之前我无法继续使用任何其他功能。
我感谢任何帮助和提前感谢。
答案 0 :(得分:2)
我发现了一些有趣的信息,看起来像try catch不会为你做任何事情,因为它可能是你要求c#生成的图形数量。您必须降低显示图形的质量或减少代码中需要图形的对象数量,请参阅:
System.ComponentModel.Win32Exception: The operation completed successfully
好像你不是唯一有这个问题的人。
人们在具有相同的执行权之前通常具有高图形需求。优化代码就是您所需要的,管理减少游戏所需的内存并不是一项简单的任务。勇敢的朋友!
PS。从dispose()开始将是一个好主意;)