求助creator贝塞尔曲线做捕鱼,如何让鱼从曲线中间运动

求助creator贝塞尔曲线做捕鱼,断线重连用户如何让鱼从曲线中间运动
var bezier;
if (mm == 1) {
bezier = [
cc.p(260, -663),
cc.p(-263, 231),
cc.p(-839, -231)];
} else {
bezier = [
cc.p(260, -363),
cc.p(-263, 231),
cc.p(-263, -231),
cc.p(-839, -231)];
}

        var bezierForward = cc.bezierTo(21, bezier);
        preChoumaNode.runAction(cc.sequence(bezierForward, finish));

这样无法无法控制鱼的起始位置,个人有两个想法,但不知如何实现,如下:
1、控制生成的贝塞尔曲线,只要后面需要运动的轨迹。
2、控制鱼运动的起始点坐标。

2赞

之前是参考C++那边bezierTo的代码,其实就一个根据时间计算x\y的数学公式,然后自己写了个函数,传入必要的参数,update。

1赞

能分享下你的代码吗?

cocos 目前只能是二阶贝塞尔曲线,如果有多阶贝塞尔曲线的需求,可以和我一起完善这个插件
https://github.com/tidys/CocosCreatorPlugins/tree/master/packages/bezier

2赞

谢谢分享,我们这边先研究下

那就不要用贝赛尔曲线,写个小工具 每条轨迹预先用贝赛尔曲线生成一组像素点,服务器传鱼的起始时间和生命时长,用像素点个数除以 生命时长*起始时间,就知道鱼的起始点在速度的第几个

不错,希望版主可以加入到下一个版本中,另外好像也是不匀速的

我在做捕鱼冰冻效果时也遇到这个问题, 最简单的解决方案是:
在 CCActionInterval中增加一个方法
setElapsed: function(elapsed){
this._elapsed = elapsed
this._firstTick = false
}

暂停时action从ActionManager中移除, 并保存 elapsed值;
恢复时, 把action再添加到ActionManager, 设置 elapsed值.

换个思路,把所有的贝塞尔路径切割成等距的坐标点,鱼不停刷坐标点游动。这样你想在哪边就在哪边,根据时间也可以计算出来

网狐最老的版本就是这么整的吧。。这样有的缺陷,就是路径生成只能通过多线程去做。。

不过优点也有。。就是update的效率更高了

可以用工具先生成所有的路径,做成一个配置文件放在本地,不要在游戏里面生成

贝塞尔曲线有个公式,然后自己根据生命周期去update

直接算你轨迹时间 然后想从中间运动就算出大概到中间位置的时间 然后用这个时间update一下轨迹