由于我目前正在制作2D游戏,我试图让我的角色在各级之间加载,但我有一点问题。我的播放器开始的第一个级别加载到一个数组中,$newOrder = \Stripe\Order::create(array(
"items" => generateItems($items),
"customer" => $customer,
"currency" => "sek",
"metadata" => array("delivery_date" => $delivery_date),
"coupon" => $couponId
));
类中没有任何问题,如下所示:
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
}
}
课程中,我放置了一个Game1
来检查玩家是否与加载下一级别的尖峰相撞,如下所示:
if statement
但是当我的玩家与长钉相交时,我的游戏会冻结并收到错误消息:if (player.Bounds.Intersects(spike1.Bounds)) // if player intersects with spike
{
secondLev.Load();
}
。
我的问题是什么?
如果我错过了可以帮助您解决此问题的任何其他代码,请告诉我们!
答案 0 :(得分:0)
由于缺乏背景,很难说究竟是什么导致了它。但是,如果在您提供的代码中发生异常,则可能无法初始化以下某个内容:secondLev
或secondLev.map
。
if (player.Bounds.Intersects(spike1.Bounds)) // if player intersects with spike
{
secondLev = new secondLevel();
secondLev.Initialize();
secondLev.Load();
}
如果这还没有解决问题,你应该看看堆栈跟踪是否有线索。
答案 1 :(得分:0)
您的secondLevel
类缺少构造函数。这意味着永远不会调用Load()
和Initialize()
方法。要修复此错误,请添加一个调用这些方法的构造函数。
示例:
public secondLevel(){
this.Initialize();
this.Load();
}
另一件事:你不应该为每个新关卡创建一个全新的课程。相反,你应该拥有一个具有Level级别所有属性的Level
结构(或类,如果你真的想要)。然后,要创建新级别,只需执行Level secondLevel = new Level(map,size);