Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单游戏-关卡之间的加载问题_C#_.net_Xna_Monogame - Fatal编程技术网

C# 单游戏-关卡之间的加载问题

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

由于我目前正在制作一个2D游戏,我试图让我的角色能够在两个关卡之间加载,但我遇到了一点问题。我的玩家启动的第一级在
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()
中那样。