请问塔防游戏,子弹自动攻击最靠近的移动对象要怎么实现

1)如果获取当前敌人的坐标,然后按照缓慢卫衣子弹过去,有可能敌人移动得快就打不到它了

2)如果式按照敌人得速度预判敌人和我方得子弹速度来决定未来相遇得位置,这种方式会不会比较合理

3)如何判断哪个敌人离我式最近得

希望以上能给出一些代码提示下

1 子弹太慢敌人太快。子弹不会追踪或者移动太慢的话,敌人移动快肯定就可能打不中了。
2 子弹太快敌人太慢。比例FPS射击游戏,子弹当前在敌人前面,下一帧因为子弹速度太快直接穿过到敌人后面了,无法进行碰撞判断,这要用射线了。
3 判断最近的敌人,就是遍历敌人找出直线距离最短,API cocos已经提供了
Vec2. distance

不过看你这个塔防游戏,子弹一般都不会太快。只需要遍历敌人,得出直线距离最短,子弹发射后按照原定方向移动,每帧和敌人进行碰撞检测就行了。

2赞

1)做成追踪弹,每一帧都自动调整更改目标位置,位置过近直接命中
2)比较难做,不如用1
3)两点间距离公式,注意不用开方,影响性能

非常感谢提供的方案

弹道直接一个表现动画飞过去,逻辑上每发子弹字节命中。省略弹道。

1赞

1 & 2. 可以预判, 塔与敌人距离, 敌人移动方向与速度,塔子弹都是已知,再加上怪物体积又不是一个点, 而是一个范围, 所以不用预判得太准基本都能100%命中。

  1. 敌人不多, 直接暴力历遍找最短距离,或者建立基于每个塔维度的距离二叉堆, 每帧怪物更新位置时更每个塔的二叉堆数据, 当塔要判断时堆的根节点便是最短距离敌人。 如果敌人很多, 那就离不开四叉树或k-d树进行区域划分计算
1赞

这不是应该是在内存算好,
画面上只展示动画吗?

还是因为数量实在太多,才有需要做弹道检测?

@楼主 不用纠结了,这个就是最佳答案 :+1:

速度过慢的子弹,就不该有自动攻击属性~比如,陷阱等于 速度0 的子弹,哪个怪物碰到,哪个受伤害