将level的代码继承DrawableGameComponent
通过添加或移除游戏组件实现关卡切换
例如
public class BirthPoint : DrawableGameComponent { public BirthPoint(Game game) :base(game) { } }
将类实例化后加入game component 列表中
只需要重写init/loadcontent/update/draw 方法即可
无需将init/loadcontent/update/draw 添加到主循环代码中
可以在游戏组件中添加其他组件
关卡通关后移除全部游戏组件 , 重新加载 完成关卡切换
public void UnLoadLevel() { //_world = new World(); //倒序移除 for (int i = Game.Components.Count - 1; i >= 0; i--) { if (Game.Components[i] != null) { Debug.WriteLine(Game.Components[i].ToString()); } Game.Components.Remove(Game.Components[i]); Debug.WriteLine($"NO{i}: 卸载成功"); } }
Game.Components和list类似,不能在便利循环循环过程中改变list数组大小,可以倒序移除