思维僵化,求一个类似愤怒小鸟的抛物线瞄准线的解决方案。

项目需要实现炮弹,同时炮弹需要瞄准线和敌人AI需要预判炮弹轨迹和落点。
考虑过贝塞尔曲线,但是贝塞尔曲线的抛物线效果很难控制,有时候非常假。
使用物理实现抛物线,不好预判落点。
有大佬做过这个需求的么。

考虑过直接运算出炮弹的轨迹,但是不太了解creator物理的算法,有大佬了解的话求告知。

vt=v0+at

完美的解释

实在不行就复制一个同样的刚体把他发射出去得到线路

哇塞,这思路好!

如果你只是计算飞行轨迹,可以直接用抛物线公式计算.

重力加速度,初速度(带方向)你都知道,设定t=0.1或者t=0.2,然后计算位置,通过一个点的sprite标识出来.

高中物理抛物线的计算公式

发射刚体不行,因为瞄准线需要实时更新的,发射刚体得到路径的话无法实时更新

根据物理公式,再使用绘图组件画线

1赞

请问楼主,解决了吗。。。

请问大佬会了吗? 同问~~~

请问楼主,解决了吗。。。

里面的怪物射箭,有带计算落点的,楼主看下是这样的吗

1赞

有解决了此问题的吗? 有好的方法吗

1赞

就是类似这种怪物射箭的 希望能解答一下 实现原理 感谢

1赞

写得比较局限: 自己写的重力计算。
在update里可逐帧计算time,然后可计算出x,y的实时坐标,这里只是预算一下终点(肯定有最好的办法,但是游戏不复杂,就没考虑那么多了)
var time = 0
let tx = this.node.x;
let ty = this.node.y;
while(true){
time += 0.016;
var gx = this.gravity.x * time * time / 2
var gy = this.gravity.y * time * time / 2
var x = this.speedx * 0.016 + gx;
var y = this.speedy * 0.016 + gy;
tx += x;
ty += y;
if(ty < global.Config.hintY){ //水平线坐标
ty = global.Config.hintY
break;
}
}
this.endHint = global.GameMgr.endHintMgr.addHint(tx,ty); //绘制落点红圈

3赞

多谢回复

好像很多人遇到这个问题,我的解决方案大致思路跟大家分享下:
问题可以分成两个,瞄准线,和敌人AI瞄准
瞄准线很简单,3楼给的公式 vt=v0+at 计算垂直方向的位移 加上水平方向的位移 m = vt,
带入t算出一堆点就是瞄准线了

敌人ai,有两个方法,1计算抛物线与多边形是否相交这个算法网上有很多,借助算法在一定区间遍历炮弹射出角度和力度(初速度)是否与目标矩形相交就行了。
2,我自己用的,比较取巧的一个方法,还是在一定区间遍历炮弹的射出角度和力度,不过判断是否击中目标区域的条件是炮弹飞到目标同一水平面的时候距离目标的距离。