- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试制作一个可点击的 map 游戏(如 Risk),其中我有许多与此类似的 svg 路径:
Example SVG Map
所以当玩家1点击玩家2的领土来攻击它时,点击的领土应该与玩家1的领土有边界,否则攻击无效。
我想将所有路径及其相邻路径存储在一个多维数组中,如下所示:
path[0] -> path[0][0] path[0][1] path[0][2]
path[1] -> path[1][0] path[1][1]
但是由于我的 map 很大,我这样做效率真的很低。关于如何解决这个问题有什么建议吗?
最佳答案
创建国家表
包含邻接信息,每个国家通常最多有 7 个邻国,除非你有梵蒂冈、卢森堡等小国......所以对于统一的 map 分割,你可以使用静态数量的邻国。像这样:
int map[countries_max][neighbors_max];
统一 map 划分
获取邻接信息的方式有很多。对于均匀划分的 map ,您可以计算通常靠近国家中心的边界路径的平均点。取每个国家点并找到离它最近的国家(点)。如果距离更小,则阈值存储邻居列表中的国家/地区索引。阈值可以围绕国家大小(对于矩形划分,每个轴需要 2 个阈值)。
通用 map 划分
您需要检查国家边界路径的任何部分是否靠近/平行于其他国家边界路径的任何部分。如果是,则将国家索引存储在邻居列表中。这只有在您有边界路径时才可行。
通用 map 划分(无边界路径)
如果您的 map 是栅格或矢量 map ,但不是每个国家/地区的闭合多边形/路径形式(例如,您可以改为使用分割路径),则上述方法不可用。当你攻击时,你知道攻击的开始和结束位置,所以从开始到结束投线(DDA 或 Bresenham)并计算你越过多少条边界线(计算颜色边缘)。如果计数为 1,则移动有效。如果您多次跨越同一边界进行攻击,这将产生误报。
关于html - 如何在 SVG 文件中查找相邻路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31385297/
我是一名优秀的程序员,十分优秀!