Ios PaintCode-在路径上移动对象

Ios PaintCode-在路径上移动对象,ios,swift,paint,bezier,Ios,Swift,Paint,Bezier,我想画一条曲线,并附加一个对象到它。是否可以创建分数(从0.0到1.0),使我的对象在路径上移动?当分数为0时,对象位于开始位置,当0.5处于中间位置时,最后当分数为1.0时,对象位于结束位置。当然,我想要一条曲线路径,而不是直线:)可以在PaintCode中实现吗?基于这样一个事实,即您将使用线性距离沿着曲线行走,贝塞尔曲线非常糟糕,您需要自己构建线性映射。但这相当简单: 绘制曲线时,还要建立一个查找表,在100个点(t=0、t=0.01、t=0.02等)对曲线采样一次。在伪代码中: lut

我想画一条曲线,并附加一个对象到它。是否可以创建分数(从0.0到1.0),使我的对象在路径上移动?当分数为0时,对象位于开始位置,当0.5处于中间位置时,最后当分数为1.0时,对象位于结束位置。当然,我想要一条曲线路径,而不是直线:)可以在PaintCode中实现吗?

基于这样一个事实,即您将使用线性距离沿着曲线行走,贝塞尔曲线非常糟糕,您需要自己构建线性映射。但这相当简单:

绘制曲线时,还要建立一个查找表,在100个点(t=0、t=0.01、t=0.02等)对曲线采样一次。在伪代码中:

lut = [];
lut[0] = 0;
tlen = curve.length();
for(v=0; v<=100; v++) {
  t = v/100;
  clen = curve.split(0,t).length();
  percent = 100*clen/tlen;
  lut[percent] = t;
}
lut=[];
lut[0]=0;
tlen=曲线长度();

对于(v=0;v,如果您只需要将其作为进度条,则可以在PaintCode中使用。诀窍是使用虚线笔划和非常大的间距,然后只需更改虚线即可

然后只需附加一个变量,就完成了



编辑:关于原始帖子下的讨论,此解决方案使用点作为单位,因此它将沿曲线平均分布,无论贝塞尔曲线有多弯曲。

不确定这是否是一个正确的问题,但我尝试了相同的方法,并得出结论:不,这在PaintCode中是不可能的。这是一个编程问题这是完全可能的,但是你错过了重要的信息。路径上的速度应该是线性的,基于物理的,还是“随便什么”?因为你用“贝塞尔”标记了它,这是一条完全非线性的曲线:沿贝塞尔曲线移动的对象将沿直线段移动得相当快,并与路径曲率成比例地减慢。虽然参数=距离值0=0%、0.5=50%和1=100%在定义上为真,但其他参数=距离值对贝塞尔曲线都不为真,因此只需给出这些值即可三个值是不够的。但我不需要动画。我想把它用作一个视觉进度条:)只需要设置值0.5,让我的对象位于Bezier的一半,它正在读取几乎不相关的位,而不是专注于重要的部分。进度条与距离成线性关系。贝塞尔曲线绝对不是,所以您回答了这个问题:您需要线性曲线遍历。请参阅我的答案,了解基于这些信息的实际答案。这是阅读几乎不相关的部分,而不是关注重要部分。进度条与距离成线性关系,而贝塞尔曲线绝对不是,因此您需要以某种方式将非线性贝塞尔曲线遍历转换为线性曲线遍历。根据这些信息,请参阅我的答案。请记住:更新进度条绝对是一个动画。当然,它是“一点一点”的,但这只是使它成为一个缓慢的动画。你仍然在沿着曲线移动一个物体。