Class 与xna中对象的交互

Class 与xna中对象的交互,class,xna,collision,Class,Xna,Collision,我对使用xna还不熟悉,我想让我的播放器与同一类的多重墙发生碰撞。所以我环顾四周,我明白了最好的方法是创建一个包含墙id的变量列表,并做一个循环,将它们全部圈起来,然后返回碰撞对象的变量。 我的问题是,是否有一种更快、更有效的方法可以做到这一点?我的意思是,如果我有10000个对象,循环会导致大量内存使用。 Thx预先选项1)如果这10000个对象是某个标高的墙,那么您可能应该使用某种网格(就像这个非常古老的示例:) 使用栅格时,您只需检查与相邻对象的碰撞,或仅检查与附近对象的碰撞 选项2)如果

我对使用xna还不熟悉,我想让我的播放器与同一类的多重墙发生碰撞。所以我环顾四周,我明白了最好的方法是创建一个包含墙id的变量列表,并做一个循环,将它们全部圈起来,然后返回碰撞对象的变量。 我的问题是,是否有一种更快、更有效的方法可以做到这一点?我的意思是,如果我有10000个对象,循环会导致大量内存使用。 Thx预先

选项1)如果这10000个对象是某个标高的墙,那么您可能应该使用某种网格(就像这个非常古老的示例:) 使用栅格时,您只需检查与相邻对象的碰撞,或仅检查与附近对象的碰撞

选项2)如果这10000个对象是敌人或移动更自由的子弹,则您也可以首先计算距离,并且仅在对象靠近时检查碰撞


但是我可以问一下你为什么使用XNA吗?我曾经使用过XNA4.x,但据我所知,它已经死了()。如果您是XNA新手,我建议您使用其他软件制作游戏(如Unity3D)。在Unity3D中,碰撞检测的困难部分是为您完成的(is具有碰撞检测的标准功能),Unity3D还与C#(如XNA)配合使用。

您总是希望以最少的处理量完成任务。对于平铺2D游戏,通常有一个二维网格。当玩家想要在某个瓷砖上行走时,如果允许该瓷砖在那里行走,您可以检查该瓷砖。在这种情况下,您只需检查一个瓷砖。如果你有很多NPC,你可以把你的地图分成几个部分,并跟踪NPC所在的部分。现在你只需要对你所在区域内的敌人进行碰撞检测

当您需要昂贵的碰撞、像素完美碰撞或多边形碰撞时,您应该首先检查一个对象是否使用简单的半径
float
BoundingSphere
接近,然后再进行更昂贵的碰撞检测


几乎任何东西都是一样的,如果你有一个100x100的瓷砖贴图,但只需要为屏幕绘制20x10,那么你应该通过计算来渲染该部分。在虚幻中,地图绘制者创建不可见的框,当在这些框内时,它只绘制地图的某一部分,并且只检查这些框内的碰撞。GameDev的所有功能都是为了让事情顺利进行。

首先是thx的帮助:)我在玩了Dust:aet之后开始使用它。我不知道这是非常艰难的lol,我会检查unity,看看它是怎样的。Thx againXNA是框架,Unity是游戏引擎。如果您希望了解游戏的工作原理并控制每个部分,那么您可以使用XNA,但如果您只是希望制作一个游戏,那么请使用unity,您可以在其中拖放资产和功能。+1用于给定的选项,但不用于建议不再使用XNA。他可能会使用Monogame,如果是这样的话,那么XNA是一个不错的选择。此外,正如达沃所说,Unity是一个引擎,这意味着你将无法像使用XNA那样学习。@DavorMlinaric
DirectX
是一个API;XNA是框架;团结是游戏引擎。如果您希望了解游戏的工作原理并控制每个部分,那么您可以使用DirectX,因为它至少在今天仍然相关,并且不像XNA那样死气沉沉。然而,基于COM和C++的应用是非常困难的。下一个最佳选项是
Unity3D
。它也比单游戏更具跨平台性。你们所有人都绝对正确地注意到XNA和Unity(以及DirectX)之间的区别。正是因为stav12212的问题,我觉得他有点像个初学者(在游戏开发方面,而不是编程方面),而且显然他能够使用C#。这就是我建议Unity而没有详细说明差异的原因(在Unity中使用C#几乎可以做任何事情——你可以避免大部分拖拽)。