Egret社区
1银子
所有的鱼是不是在对象池里面产生,大佬求思路

最佳答案

查看完整内容

轨迹通过贝塞尔曲线来生成,贝塞尔曲线的算法 你可以自己找找 。网上也有轮子,直接用也行 工具的舞台 是一个矩形,然后随机生成 五个锚点 或者 四个锚点(首尾两个锚点 是已经超出了矩形范围,其余的锚点 在矩形范围里面)。为了防止生成的线不顺畅,可以把矩形划分为四个小矩形,然后以小矩形的 中心点 为 每一个 锚点的参考点,然后 增加 x y 的一定的偏移,同时点的生成 要么是顺时针 要么是逆时针,不让其存在交叉。 所以总 ...
分享到 :
0 人收藏

25 个回复

倒序浏览
aser  登堂入室 | 2018-11-7 11:03:32
本帖最后由 aser 于 2018-11-13 11:16 编辑
dujunfeng 发表于 2018-11-12 16:28
大佬能指点下吗?这个轨迹的问题实在搞不出来

轨迹通过贝塞尔曲线来生成,贝塞尔曲线的算法 你可以自己找找 。网上也有轮子,直接用也行
工具的舞台 是一个矩形,然后随机生成 五个锚点 或者 四个锚点(首尾两个锚点 是已经超出了矩形范围,其余的锚点 在矩形范围里面)。为了防止生成的线不顺畅,可以把矩形划分为四个小矩形,然后以小矩形的 中心点 为 每一个 锚点的参考点,然后 增加 x y 的一定的偏移,同时点的生成 要么是顺时针 要么是逆时针,不让其存在交叉。
所以总的来说 上面的法子生成的路径 看着 也还好。

然后根据生成的锚点 做n次贝塞尔曲线,就能生成一系列的 路径了。大概意思 如下,有a b c d 四个大区域,四个红色小矩形 是四个锚点的范围 ,因为是随机,所以如果不确定锚点范围的话 可能会导致 两个点靠的太近,路线不自然。然后左上角 或右下角 在区域外的可当做是 入口或者出口,而出入口 其实可以有很多种,比 左上角的 你可以把点设置在A区域的 上方 那么 线就不一样了,或者设置在D区域 也可以。
B C 不推荐设置,然后 下面的黑色线 就是最终生成的 几个锚点线,而蓝色的则是最终的曲线路径。
SSSS.png






dujunfeng  登堂入室 | 2018-11-7 11:24:54
有有经验的大佬吗
aser  登堂入室 | 2018-11-8 09:19:28
我们的做法是  通过工具 生成N条详细的游动路径,此路径是根据贝塞尔曲线来生成的,里面包含了每一个点的 x y rotation
然后将这n条路径命名不同的名称,并放在前端加载进游戏。同时将路径名给后端,后端每次生成一条鱼的时候 带上路径名。
aser  登堂入室 | 2018-11-8 09:22:16
鱼肯定是通过对象池获取,其次我们也没有用tween来实现路径,就直接通过 时间 来控制鱼的游动状态。
另外还有就是 鱼游动过程中生存贝塞尔曲线,不过相对而言可能有一定的消耗
dujunfeng  登堂入室 | 2018-11-8 09:34:21
aser 发表于 2018-11-8 09:22
鱼肯定是通过对象池获取,其次我们也没有用tween来实现路径,就直接通过 时间 来控制鱼的游动状态。
另外还 ...

你们鱼的动画是序列帧吗
aser  登堂入室 | 2018-11-8 12:49:16
dujunfeng 发表于 2018-11-8 09:34
你们鱼的动画是序列帧吗

是的 序列帧 帧数 还比较多  一条鱼46张图
dujunfeng  登堂入室 | 2018-11-8 14:06:54
aser 发表于 2018-11-8 12:49
是的 序列帧 帧数 还比较多  一条鱼46张图

请教下,每种鱼的种类都是一个对象池吗?鱼的对象池代码大概是怎么个思路,方便贴个demo吗?
aser  登堂入室 | 2018-11-8 14:47:14
dujunfeng 发表于 2018-11-8 14:06
请教下,每种鱼的种类都是一个对象池吗?鱼的对象池代码大概是怎么个思路,方便贴个demo吗? ...

大概思路是:
每种鱼有一个唯一标志 代表他的种类
然后用字典去存 某种鱼的 列表,大概代码如下

let _map:Object = {};
getFish( _type ):Fish{
     let _fishList:Array<Fish> = _map[_type];
     let _fish:Fish = null;
     if( !_fishList ){
       _fishList = [];
       _map[_type] = _fishList;
     }
    if( _fishList.length ){
        _fish = _fishList.shift();
   }else{
       _fish = new Fish();
   }
   return _fish;
}

同理 在放回去的时候,也是根据鱼种类先获取数组  再把鱼添加到 数组后面

Hjx  圆转纯熟 | 2018-11-8 15:55:43
aser 发表于 2018-11-8 14:47
大概思路是:
每种鱼有一个唯一标志 代表他的种类
然后用字典去存 某种鱼的 列表,大概代码如下

单机还好  同步好难啊- -
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号

Powered by Discuz! X3.2 © 2001-2019 Comsenz Inc.

返回顶部