SpriteKit检测范围

3

我正在开发一款小型/中型实时战略游戏,我有以下需求:

当敌人单位在攻击范围内时,我希望敌方玩家能够攻击盟友,反之亦然。

我的问题是:如何更好地确定敌方单位是否在盟友的攻击范围内,或者反过来呢?

我已经尝试过:

目前,我为每个单位节点添加了带有SKPhysicsBodiesSKNodes

当接触发生时,我可以看到帧速率下降…我猜这不是检测敌人是否在范围内的最佳方法。

我想另外一种方式是在Update方法中运行一些嵌套循环,并检查半径范围内是否有敌方单位。但我不确定这是否是最佳方法,但使用这种方法,我可以尝试调整一些参数,并根据自己的需要优化程序。

我想知道是否有更好的替代方案。

1个回答

2

了解GamePlayKit,可能会有你想要的一些内容。

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

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

将您的士兵视为小队的最佳方法是将它们全部添加到SKNode中(子类以添加更好的功能),然后只需比较这些小队SKNodes

如果您想减少所做的检查次数,请考虑将游戏区域转换为网格(如国际象棋棋盘)。由于您知道瓷砖的大小,因此可以轻松检查单位是否足够接近以进行距离检查。例如,您在a1处有一个单位,在i9处有一个敌人,那么您就知道仅通过瓷砖距离,单位之间的距离太远了,无法互相攻击。


还可以考虑设置一个瓦片游戏场地,这样你就可以减少一些工作量,比如如果敌人在1a处,而你的角色在9i处,你就知道可以忽略计算距离。 - Knight0fDragon
先生,回去尝试重建用户控制的单位并绑定到小队中真的更好吗? - Coldsteel48
你能在回答中加入navmesh的方法吗?如果可以的话,我会非常感激 :) - Coldsteel48
这并不是真正的导航网格,哈哈。导航网格用于避免地形等方面的问题。 - Knight0fDragon
是的,您可以使用导航网格来查找敌人,这只是一种更高级的功能。我几乎可以确定Gameplay Kit可以处理类似的事情。 - Knight0fDragon
显示剩余15条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接