站内搜索

搜索
热搜: 活动 交友 discuz

iFAction 世界需要你的想象力!

算法优化建议和讨论(一)

ljh

1

主题

10

帖子

33

积分

iF元素粒

Rank: 2

积分
33
发表于 2020-6-20 13:47:05 | 显示全部楼层 |阅读模式
大家好,我是小雨微梁。大家如果喜欢这个帖子可以支持一下哈
敌人索敌,技能范围判定以及很多情况时,都需要找到最近的目标。默认脚本的算法是遍历所有敌人,找到最近的距离。然而这样有n个敌人,每一帧就至少要算n次了。我想了一个算法,想和大家讨论,看下可不可行。
如图,先把所有敌人分别按x和y坐标排序,如果相同就拿另一个轴的排,得到两个数组,这是可以重复使用的,每帧只用算一次。


然后对于每个需要找到最近敌人的时候,用以下算法就可以了
如图。比如要找ID为8的敌人的最近敌人。
1.分别找到在x轴和y轴上最近的目标。可以看到在x轴上的是7,y轴上的是5。如果在x轴和y轴上最近的是同一个敌人,就可以直接结束了。
2.比较7和5分别与8的y轴距离和x轴距离,取最小的那个。在这里是5
3.离8最近的敌人就在5和14之间,也就是5/6/9/7/10/14,遍历在这个区间的敌人就好。注意看我的图才能理解这一步。
原理的话很简单,比如纸上有ABC三个点,如果离A点最近是C点,它的横坐标离A点横坐标的距离和纵坐标离A点纵坐标的距离总不可能比B点横坐标到A点横坐标的距离和B点纵坐标A点纵坐标的距离都要大吧
不过这只是我的突发奇想,没有经过验证,所以拿出来讨论和参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

14

主题

150

帖子

1906

积分

iF城镇

Rank: 6Rank: 6

积分
1906
发表于 2020-6-20 14:41:07 | 显示全部楼层
太强了
莫问,问就是在偷懒

20

主题

42

帖子

556

积分

iF村庄

Rank: 5Rank: 5

积分
556
发表于 2020-6-20 17:49:09 | 显示全部楼层
微凉大佬,为你打咔,加油,奥利给!
放置游戏开坑中

20

主题

42

帖子

556

积分

iF村庄

Rank: 5Rank: 5

积分
556
发表于 2020-6-20 17:52:02 | 显示全部楼层
确实,如果没有在视野范围内的怪物,感觉可以不用计算,在视野范围内的不在攻击范围内的也是,这样优化,可以超多怪也不那么卡了
放置游戏开坑中
ljh

1

主题

10

帖子

33

积分

iF元素粒

Rank: 2

积分
33
 楼主| 发表于 2020-6-20 19:08:33 | 显示全部楼层
本帖最后由 ljh 于 2020-6-20 19:09 编辑
zimo游戏 发表于 2020-6-20 17:52
确实,如果没有在视野范围内的怪物,感觉可以不用计算,在视野范围内的不在攻击范围内的也是,这样优化,可 ...

确实是,这个就是能从自己开始往外找。如果离自己最近的都不再攻击范围内,还计算什么呢

14

主题

161

帖子

826

积分

iF村庄

Rank: 5Rank: 5

积分
826
发表于 2020-6-22 17:39:09 | 显示全部楼层
这回有两位小雨大神了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们
QQ群:977585123
iFAction下载
Windows客户端
反馈
意见建议
iFAction

iFAction

京ICP备15053274号-1

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.