Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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# Xna防止播放器与地图部分重叠_C#_Xna - Fatal编程技术网

C# Xna防止播放器与地图部分重叠

C# Xna防止播放器与地图部分重叠,c#,xna,C#,Xna,我在游戏中有一个想法,在地图上有三层,第一层是地面,第二层是道路/草地/等等,第三层是无法通行的物体,如墙/建筑物/湖泊/河流/树木。我有它,所以玩家在屏幕的中间居中,并且地图的层以玩家想要的相反方向移动。我在想,如果playerModel与不可通行层上绘制的内容重叠,那么playerModel将向后移动。然而,由于我是xna新手,我不知道如何让游戏认识到playerModel与不可通行层上的不可通行对象重叠。显然,不可通行层上只绘制了对象,并且在没有对象的任何地方都是空的。因此,我不能只说:

我在游戏中有一个想法,在地图上有三层,第一层是地面,第二层是道路/草地/等等,第三层是无法通行的物体,如墙/建筑物/湖泊/河流/树木。我有它,所以玩家在屏幕的中间居中,并且地图的层以玩家想要的相反方向移动。我在想,如果playerModel与不可通行层上绘制的内容重叠,那么playerModel将向后移动。然而,由于我是xna新手,我不知道如何让游戏认识到playerModel与不可通行层上的不可通行对象重叠。显然,不可通行层上只绘制了对象,并且在没有对象的任何地方都是空的。因此,我不能只说:

if (playerModel.X > impassableLayer.X)
{
   impassableLayer.X++;
}
因为这永远都是事实


有没有办法判断对象是否与层重叠?

我相信你要找的是碰撞检测。您希望防止对象彼此通过。它不像你的想法那么简单。真正的碰撞检测需要做大量的工作,但是他们的教程有很多


你可以随时在网站或谷歌上搜索,这方面有很多资源。

那么这是否意味着我必须实例化每一栋建筑/湖泊/树木,并将它们以单独的坐标放置在地图上?这似乎会占用很多时间和内存,因为如果我在地图上有10000棵树,游戏必须首先创建10000棵树中的每一棵,然后将它们放在地图上,对吗?是的,你会,但是,在计算中,10000并不多。我的游戏中有超过2000万个物体。我明白了,现在来看这个像素碰撞的东西,虽然它看起来像是说如果“物体”接触到透明像素,它就不算碰撞了,对吗?既然图层上唯一的非透明像素是对象的像素,那么我可以不使用这种方法吗?你不必使用同一图层,你可以比较多个图层,或者你想要什么。