Sprite kit SpriteKit探测范围

Sprite kit SpriteKit探测范围,sprite-kit,Sprite Kit,我正在制作小型/中型RTS游戏,我有以下需求: 我希望敌人玩家在每个攻击范围内攻击盟友,反之亦然 我的问题是:如果敌方单位在盟军的攻击范围内,或者当然是在盟军的攻击范围内,那么什么是更好的方法 我试过什么: 现在,我尝试为每个单元节点添加SKNodes,其中包含SKPhysicsBodies 我可以看到当接触发生时FPS正在下降。。。我想这不是知道敌人是否在射程内的最好方法 我想我的替代方案是在更新方法中运行一些嵌套循环,并检查半径内是否有敌人单位。 我不确定这是否是最好的方法,但是使用这种方法

我正在制作小型/中型RTS游戏,我有以下需求:

我希望敌人玩家在每个攻击范围内攻击盟友,反之亦然

我的问题是:如果敌方单位在盟军的攻击范围内,或者当然是在盟军的攻击范围内,那么什么是更好的方法

我试过什么:

现在,我尝试为每个单元节点添加
SKNodes
,其中包含
SKPhysicsBodies

我可以看到当接触发生时FPS正在下降。。。我想这不是知道敌人是否在射程内的最好方法

我想我的替代方案是在更新方法中运行一些嵌套循环,并检查半径内是否有敌人单位。 我不确定这是否是最好的方法,但是使用这种方法,我可能会使用一些参数,可能会根据自己的需要优化例程


我想知道是否有更好的选择。

看看GamePlayKit

它可能有你想要的东西

否则,我将只使用欧几里得距离公式,而不使用平方根,并基于小队而不是单个部队使用此值。(因此,如果一个由4名士兵组成的小组正在攻击一个由5名士兵组成的敌人,则只进行1次距离检查)

之所以不求平方根,是因为你应该知道允许的平方距离。如果10像素外的敌人吸引士兵,则使用100

把你的士兵当作小队来对待的最好方法是,把他们全部添加到一个SKNode(子类以添加更好的功能),然后你只需要比较那些小队SKNode


如果你想减少检查次数,考虑把你的游戏区变成一个网格(就像棋盘一样)。因为你知道你的瓷砖的大小,你可以很容易地检查单位是否足够接近,以保证距离检查。例如,你在a1有一个单位,在i9有一个敌人,然后你通过瓦片距离就知道这些单位相距太远,无法相互攻击

谢谢你的回答,我为盟军单位使用小队进行了一些斗争(我允许用户一个接一个地完全控制这些单位或动态编队)。敌人的部队确实是由固定的小队组成的。感谢距离建议,您只需在手边放一堆小队节点,并使用
moveToParent
方法在它们之间交换,我想这不适合我的游戏(我想实现单位控制,就像在Myth2游戏中一样)。无论如何,你的大部分建议我都执行了。我检查每一个被派遣的单位离敌方小队有多远,如果在射程内,他会攻击敌方小队中的任何一个人。我从-update方法在后台线程上调用此检查。。。但是,如果我不使用盾窗进近,fps大约为40,我只有11个1友方单位和10个1班敌人:-(不知道你在说什么,我看了一些视频,他们肯定在组建小队,你可以有一个小队你不想在后台线程中调用这些东西,你不知道什么时候可以执行