C# 单游戏-关卡之间的加载问题
由于我目前正在制作一个2D游戏,我试图让我的角色能够在两个关卡之间加载,但我遇到了一点问题。我的玩家启动的第一级在C# 单游戏-关卡之间的加载问题,c#,.net,xna,monogame,C#,.net,Xna,Monogame,由于我目前正在制作一个2D游戏,我试图让我的角色能够在两个关卡之间加载,但我遇到了一点问题。我的玩家启动的第一级在Game1类中加载到一个数组中,没有任何问题,如下所示: secondLevel secondLev; // instance for secondLevel class Map map; // instance for Map class secondLev = new secondLevel(); // used in the Initiali
Game1
类中加载到一个数组中,没有任何问题,如下所示:
secondLevel secondLev; // instance for secondLevel class
Map map; // instance for Map class
secondLev = new secondLevel(); // used in the Initialize() function
protected override void LoadContent()
{
map.Generate(new int[,] {
// 0 = no tile drawn
// 3 = tile is drawn
{0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
}, 57); // size
}
为了能够加载第二个级别,我尝试创建一个名为secondLevel
的新类,该类保存新的级别数组,并在其load()
函数中加载数组,如下所示:
class secondLevel
{
Map map;
public void Initialize()
{
map = new Map();
}
public void Load()
{
map.Generate(new int[,] {
// 0 = no tile drawn
// 3 = tile is drawn
{0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
}, 57); // size
}
}
if (player.Bounds.Intersects(spike1.Bounds)) // if player intersects with spike
{
secondLev.Load();
}
现在在我的Game1
类中,我放置了一个if语句
,检查玩家是否与加载下一关卡的钉子碰撞,如下所示:
class secondLevel
{
Map map;
public void Initialize()
{
map = new Map();
}
public void Load()
{
map.Generate(new int[,] {
// 0 = no tile drawn
// 3 = tile is drawn
{0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
{3,3,3,3,3,3,3,3,3,3,},
}, 57); // size
}
}
if (player.Bounds.Intersects(spike1.Bounds)) // if player intersects with spike
{
secondLev.Load();
}
但是,当我的玩家与扣球相交时,我的游戏冻结,我得到错误消息:对象引用未设置为对象的实例
我的问题是什么?
如果我的问题中缺少任何可以帮助您解决此问题的附加代码,请告诉我 由于缺乏背景,很难说到底是什么原因造成的。但是,如果异常发生在您显示的代码中,则可能无法初始化以下之一:
secondLev
或secondLev.map
if (player.Bounds.Intersects(spike1.Bounds)) // if player intersects with spike
{
secondLev = new secondLevel();
secondLev.Initialize();
secondLev.Load();
}
如果这不能解决问题,您应该查看stacktrace以获取线索。您的
secondLevel
类缺少构造函数。这意味着永远不会调用Load()
和Initialize()
方法。要修复此错误,请添加调用这些方法的构造函数
例如:
public secondLevel(){
this.Initialize();
this.Load();
}
另一件事:你不应该为每一个新的级别创建一个全新的类。相反,您应该有一个
Level
struct(或class,如果您真的想要的话),它具有Level的所有属性。然后,要创建新级别,只需执行levelsecondlevel=newlevel(map,size)代码>错误很可能不在您发布的代码中,我们需要更多代码来帮助您解决此问题。另外,有人一定会投票决定尽快结束这个问题,因为这是一个重复的问题,所以你可能想读一会儿,你可能是本末倒置。我建议你要么1)做一些教程,要么读一本书来了解C#的基本工作原理;要么2)在你独自冒险从事这么大的事业之前,先读一本书,让你通过游戏制作过程来学习C#。@paste,这是完全不相关的建议,特别是当下面的一个答案很好地解决了我的问题时。@TimonMaths这并不是无关紧要的,因为我知道你最近问了很多问题,这些问题很容易理解,可以使用大量的资源向你介绍并引导你完成C#编程,这样你就可以避免遇到的问题。更不用说,这些书会比等待答复更快地为您提供答案,并帮助您培养自己解决问题所需的技能。只是确认一下,您将如何准确地初始化secondLev.map
?您可以为它赋值,就像在secondLevel.initialize()
中那样。