SpriteKit检测范围

时间:2016-09-01 20:51:03

标签: sprite-kit

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

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

我的问题是:如果敌方单位处于联盟的攻击范围内,或者反之亦然,那么找到更好的方法是什么?

我尝试了什么:

现在,我尝试为每个单位节点添加SKNodes SKPhysicsBodies

我可以看到FPS在接触发生时会下降......我想这不是了解敌人是否在范围内的最佳方式。

我想我的替代方法是在Update方法中运行一些嵌套循环并检查Radius中是否有敌方单位。 我不确定它是否是最好的方法,但是通过这种方法,我可以使用一些参数并根据自己的需要优化例程。

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

1 个答案:

答案 0 :(得分:2)

查看GamePlayKit,

它可能有你想要的东西。

否则我只会使用没有平方根的欧几里德距离公式https://math.stackexchange.com/questions/139600/euclidean-manhattan-distance,并使用基于小队的值,而不是单个部队。 (因此,如果一组4名士兵正在攻击5名士兵的敌人,则只进行1次距离检查)。

你没有平方根的原因是因为你应该知道平方允许距离。如果距离10英寸的敌人吸引士兵,则使用100。

像小队一样对待你的士兵的最佳方法,将它们全部添加到SKNode(子类以添加更好的功能),然后你只需要比较那些小队SKNodes

如果您想减少所做的支票数量,请考虑将您的游戏区域变为网格(如棋盘)。由于您知道瓷砖的大小,因此您可以轻松检查单位是否足够接近以进行距离检查。例如。你有一个单位在a1,一个敌人在i9,然后你知道只是通过瓦片距离,单位相隔太远而无法互相攻击