Canvas 为什么paper.js path.onFrame在从函数更改为null时不停止

Canvas 为什么paper.js path.onFrame在从函数更改为null时不停止,canvas,path,paperjs,Canvas,Path,Paperjs,我正在尝试使用path.onFrame来设置路径写入的动画,在每个帧中都会添加段。我需要能够在路径完成后停止该路径的特定帧事件,而不删除该路径。以下是我所拥有的: path.onFrame = function(event) { if(pathSegs.length > 0) { if(pathSegs[0].length > 0) { path.add(pathSegs[0].shift()); }

我正在尝试使用path.onFrame来设置路径写入的动画,在每个帧中都会添加段。我需要能够在路径完成后停止该路径的特定帧事件,而不删除该路径。以下是我所拥有的:

path.onFrame = function(event) {

    if(pathSegs.length > 0) {
        if(pathSegs[0].length > 0) {
            path.add(pathSegs[0].shift());
        }
        else {
            pathSegs.shift();
            path = new Path(pathAttrs);
        }
    }
    else {
        console.log('chalkboard finished - should only call once');
        path.onFrame = null;
        //writeText1();
    }
}
pathSegs是一个由路径段数组组成的数组,它在每一帧上向画布写入一个段,直到外部数组为空。当我设置
path.onFrame=null
时,我希望覆盖原始函数,但是我的控制台日志会在每个帧上继续打印。如果我要设置
path.onFrame=otherFunction()
而不是null,那么这两个函数将在每个帧上执行

为什么会这样?我知道我可以解决我的问题,但我想了解正在发生的事情不会让这个版本起作用

注意:最终目标是在此动画结束时触发另一个动画,即writeText1()


这是因为每次新字母开始时,您都会将一个新的
Path
实例重新分配给
Path
变量,而不会重置其
onFrame
属性。
因此,
onFrame
回调实际上只针对最后一个字母重置

您应该做的是使用与此相同的
视图
onFrame
属性,而不是使用在您的情况下会产生误导的
路径
onFrame
属性

这是正确的答案

view.onFrame=函数(事件){
如果(路径分段长度>0){
if(路径分段[0]。长度>0){
add(pathSegs[0].shift());
}
否则{
pathSegs.shift();
路径=新路径(路径属性);
}
}
否则{
log('chalkboard finished-应该只调用一次');
view.onFrame=null;
//writeText1();
}
}

谢谢!这很有道理