目前使用的是Cocos商店的98K的代码,就没有cocos物理引擎自带的射线,所以只能另寻他法。
目前检测线的逻辑是沿着发射方向,每隔一段距离就创建一个小球,可以检测到小球与障碍物碰撞,再根据法向量算出反射的方向,再继续画点。
问题:手指每移动一次,就应该画出相应的线。但是由于这样的计算方法,导致后面的小球会有一定的延迟,大概延迟个0.1左右。现想能够在肉眼观察不出来的时间内完成,有没有大佬可以帮忙解决这个问题。
图片如下:

录屏如下:
.
目前使用的是Cocos商店的98K的代码,就没有cocos物理引擎自带的射线,所以只能另寻他法。
目前检测线的逻辑是沿着发射方向,每隔一段距离就创建一个小球,可以检测到小球与障碍物碰撞,再根据法向量算出反射的方向,再继续画点。
问题:手指每移动一次,就应该画出相应的线。但是由于这样的计算方法,导致后面的小球会有一定的延迟,大概延迟个0.1左右。现想能够在肉眼观察不出来的时间内完成,有没有大佬可以帮忙解决这个问题。
图片如下:

录屏如下:
.
延迟大概多久呢?如果是计算量太大,试试分帧计算,或者走 wasm 去计算
98k的碰撞也是跳过计算的,大概后面的球延迟个0.1左右吧
移动for循环模拟
或者自己写个射线检测
一个球路线,模拟也很快
这种射线step式检查,越长效率越低。
提供一个思路,可以采用光线跟踪类的算法来做:
1.给场景剖分一个四叉树,剖分到模型或剖分到三角面都可以,用于每次检测时快速剔除射不到的物体。场景物体少的话,嫌麻烦也可以不做。
2.看图里面,你的障碍物很少,直接用 射线 与 三角面 相交的公式来判断交点与计算反弹。多反弹几次就能算出多个落点。
3.对落点连出线段,再画上你的白色小球点。
试试直接通过一个小球计算出路径,不要每个小球去碰撞
是不是小球指示在变化轨迹线的时候。能看到变化轨迹线过程。说的是这个变化延迟
主要还是 循环跑一遍 小球的运动逻辑,如果你是纯物理的,可以写个路径计算的方法;
这个不比砰砰法师简单几十倍?
export function intersectionLineLine(ax: number, ay: number, bx: number, by: number, cx: number, cy: number, dx: number, dy: number): cc.Vec2 {
let deltX = ax - bx;
let deltY = ay - by;
let abc = deltX * (ay - cy) - deltY * (ax - cx);
let abd = deltX * (ay - dy) - deltY * (ax - dx);
if (abc * abd > 0) return null;
let cda = (cx - dx) * (cy - ay) - (cy - dy) * (cx - ax);
let cdb = cda + abc - abd;
if (cda * cdb > 0) return null;
let ratio = cda / (abd - abc);
return cc.v2(ax - deltX * ratio, ay - deltY * ratio);
}
看下你的开销在哪, 0.1s 不太像是射线的, 检查下是不是材质/shader
先确定是检测的开销还是渲染的开销,渲染可以用曲线纹理2d[CurveTexture2d]这个可以渲染你的球

又帮你宣传了 
我尝试用AI简单实现了一个功能完整的,手机测试非常流畅,没有任何问题
没有物理引擎,计算逻辑是
整体逻辑没有什么复杂计算,一些线段相交引擎也有内置的工具函数.
差不多同样的话我给了Claude,一次生成的结果可以直接运行. 没有任何问题,效果也和上面基本一样.
所以你的逻辑要修改下,要先计算出所有的路径点,再根据点画球.

感觉几分钟就改好了,钱哪里领
有没有延迟主要看你这个碰撞检测有没有在当前帧进行