请教一个prefab以随机角度移动一段距离的思路

我需要在屏幕外随机生成prefab,然后以随机的角度向屏幕“中心”(不是中心点,是以中心点为圆心的一块小圆区域)移动,直到移出屏幕。


(如上图所示,在红色圆环外随机生成prafab,然后朝着蓝色圆圈内的随机一个点移动,直到移出绿色的矩形屏幕)
请教大神两个问题:
1.屏幕外的随机生成有没有更好的解决办法?PS:现在是在屏幕外的四个方向,各有一块矩形,在里面随机生成prefab(感觉有点笨。。生成方法要跑4次)
2.prefab生成后怎样实现随机冲向中心圆,再冲出屏幕?PS:没有想出来,原先的想法是在中心圆随机生成坐标,然后prefab向坐标方向移动一段距离(这段距离足够移出屏幕),但是查看文档没有查到这样的方法,moveBY和moveTo都是移到中心圆就停止了,不能继续移动。

起点为节点的生成点p1 (x0,y0),中心圆中随机一点为p2(x1,y1),目标点是屏幕外的一点p3 (x2,y2),
p1点在生产节点后已知,p2和p3点需要你自己随机生成

由于x0,y0,x1,y1,x2,y2均已知,相当于求解联立方程式组,消除参数t,得到控制点x,y的表达式。
剩下的就是程序上的事情了。

或者粗暴一点,那就是通过for循环进行无穷枚举找到解,t属于[0,1]

当然,上面说的使用贝塞尔曲线,也就是bezierCurveTo这个api的话,整体效果会比较平滑一些。

如果你需求没这么高,通过jump也可以,jump的高度值随机取

seqence(
    cc.jumpTo(P1点),
    cc.moveBy(方向向量)
)

这个方向的向量要自己算一下,可以粗略的把最高点到终点的向量看作这个方向向量

再简单一点,粗暴一点的话,那就是通过moveto去做的

4赞

非常感谢!现在打算把这三个点放到同一条直线,这样的话,p1,p2可以随机生成,然后p3换算出来,把p1直接moveTo到p3。看了您的思路和公式,对我的提醒很大,如果不在同一条直线,原来jump也是可以的(以前我可能一直短路了。。)还有贝塞尔曲线,后面要用到,这里可能也要改用贝塞尔,现在更清楚了,感谢!!