将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数组大小,可以倒序移除