由于AOE,area of effect,永远是一个圆,我首先想到的就是计算地图中每个单元到圆心的距离,确定一个单元在圆的范围内公式 (X unit - X center ) 2 + (Y unit - Y center ) 2 < R 2,其中 R 是圆的半径。
显然,它不是一个有效的算法。或许可以先缩小计算面积,再用上面的公式来改进。但是计算仍然是耗时的操作,散列可能是解决这个问题的有效方法,而我实际上不知道该怎么做:(。我真的想知道游戏中使用了什么算法。
由于AOE,area of effect,永远是一个圆,我首先想到的就是计算地图中每个单元到圆心的距离,确定一个单元在圆的范围内公式 (X unit - X center ) 2 + (Y unit - Y center ) 2 < R 2,其中 R 是圆的半径。
显然,它不是一个有效的算法。或许可以先缩小计算面积,再用上面的公式来改进。但是计算仍然是耗时的操作,散列可能是解决这个问题的有效方法,而我实际上不知道该怎么做:(。我真的想知道游戏中使用了什么算法。
这些可能会有所帮助:
碰撞检测,包围圈 http://mastrgamr.net/xna/xna-collision-detection-bounding-circle/
Bounding Box Collision Detection http://www.dreamincode.net/forums/topic/180069-xna-2d-bounding-box-collision-detection/