C# 为什么Loadcontent已经在Initialize()方法中执行?
我正在Visual Studio中试用XNA/Monogame。我发现文档在解释主XNA结构如何运行方面有些欠缺。据我所知,Game1.Initialize在Game1.LoadContent之前被调用 但是在这个代码示例中,我发现内容实际上已经在initialize函数中加载了。在这个代码示例中,您将看到--1--在--2--之前登录到控制台。为什么会这样 游戏1.CS 控制台输出:C# 为什么Loadcontent已经在Initialize()方法中执行?,c#,xna,C#,Xna,我正在Visual Studio中试用XNA/Monogame。我发现文档在解释主XNA结构如何运行方面有些欠缺。据我所知,Game1.Initialize在Game1.LoadContent之前被调用 但是在这个代码示例中,我发现内容实际上已经在initialize函数中加载了。在这个代码示例中,您将看到--1--在--2--之前登录到控制台。为什么会这样 游戏1.CS 控制台输出: 这是因为您在方法的开头调用base.Initialize,然后调用LoadContent方法。对基类实现(包括
这是因为您在方法的开头调用base.Initialize,然后调用LoadContent方法。对基类实现(包括base.Initialize和base.LoadContent)的调用应始终位于相应方法的末尾。这是因为您在方法的开头调用base.Initialize,然后调用LoadContent方法。对基类实现(包括base.Initialize和base.LoadContent)的调用应始终位于相应方法的末尾。是的,我通过反复试验发现了这一点。但我怎么会知道呢?文档中没有说明base.initialize实际调用loadcontent。当您在编辑器中单击go to definition(转到定义)时,仍然没有指示基类做了什么,方法为空。对我来说,这似乎有点像意大利面代码……“goto”就是意大利面代码。您无法看到这一点的原因是visual Studio go to definition没有反编译代码,因此该方法为空。VS仅仅显示了类结构。另一方面,如果你觉得这很烦人,即使这只是一个2分钟的测试问题,那么我猜你不会觉得开源社区非常友好。大多数内容,虽然有很好的文档记录,但通常并不涵盖所有场景。因此,开源部分。我认为XNA/Monogame的主要问题是它似乎是一个“死”的项目,如果你能找到它,文档非常稀少。我仍然将其用于指导目的,但与Unity或Javascript不同的是,实际上并没有一个活生生的在线社区每周都在不断地发明新东西。@Kokodoko同意。我最喜欢的两个教程网站Reimers MVP;肖恩·哈格里夫斯(Shawn Hargreaves)和微软几年前就停止了。当宣布Win8不支持它时,我放弃了它。我转向了团结,没有回头看是的,我通过反复试验发现了这一点。但我怎么会知道呢?文档中没有说明base.initialize实际调用loadcontent。当您在编辑器中单击go to definition(转到定义)时,仍然没有指示基类做了什么,方法为空。对我来说,这似乎有点像意大利面代码……“goto”就是意大利面代码。您无法看到这一点的原因是visual Studio go to definition没有反编译代码,因此该方法为空。VS仅仅显示了类结构。另一方面,如果你觉得这很烦人,即使这只是一个2分钟的测试问题,那么我猜你不会觉得开源社区非常友好。大多数内容,虽然有很好的文档记录,但通常并不涵盖所有场景。因此,开源部分。我认为XNA/Monogame的主要问题是它似乎是一个“死”的项目,如果你能找到它,文档非常稀少。我仍然将其用于指导目的,但与Unity或Javascript不同的是,实际上并没有一个活生生的在线社区每周都在不断地发明新东西。@Kokodoko同意。我最喜欢的两个教程网站Reimers MVP;肖恩·哈格里夫斯(Shawn Hargreaves)和微软几年前就停止了。当宣布Win8不支持它时,我放弃了它。我转向了团结,没有回头看
protected override void Initialize()
{
base.Initialize();
// SOMEHOW LOADCONTENT HAS NOW ALREADY BEEN EXECUTED?
Console.WriteLine("----2---- STILL EXECUTING INIT CODE");
}
protected override void LoadContent()
{
Console.WriteLine("----1---- GAME1 LOADS CONTENT");
AssetsManager.LoadContent(this);
SpriteBatch = new SpriteBatch(GraphicsDevice);
}
----1---- GAME1 LOADS CONTENT
----2---- STILL EXECUTING INIT CODE