You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Incisor中动态修改GraphicObject的运动速度?

如何在Incisor中动态修改GraphicObject的运动速度?

嘿,我完全懂你碰到的问题!你现在的代码里有个关键误区:当你调用addMotion.each()的时候,其实是把this.speed的初始值0直接传递给了运动实例,而不是让运动持续监听这个属性的变化。所以哪怕之后你用swoopValue把this.speed改成10,已经创建好的运动根本感知不到这个变化——它从一开始就被固定成0速度,自然不会动啦。

那该怎么解决呢?这里有两种靠谱的思路,你可以根据Incisor的实际API支持情况来选:

方法一:让运动动态读取speed属性

如果Incisor的addMotion.each()方法允许速度参数传入函数(而非固定数值),那你可以直接传一个返回this.speed的函数,这样运动每次计算速度时都会取最新的值:

class ProjectMain {
    init() {
        let myGraphicObject = new GraphicObject( nc.graphicAssets.whiteBox, nc.mainScene, "Box" );
        this.speed = 0;

        // 用函数替代直接传this.speed,每次运动计算时都会获取最新的speed值
        myGraphicObject.position.addMotion.each( 
            [-300,-100,0], 
            [300,100,10], 
            () => this.speed, 
            nc.motionTypes.MoveInCircle 
        );

        nc.swoopValue( this, "speed", 10, 10 );
    }
}

方法二:在swoop的回调中手动更新运动速度

如果Incisor不支持函数作为速度参数,那我们可以先把运动实例存下来,然后在swoopValue的回调里,每次speed更新时同步修改运动的速度属性:

class ProjectMain {
    init() {
        let myGraphicObject = new GraphicObject( nc.graphicAssets.whiteBox, nc.mainScene, "Box" );
        this.speed = 0;

        // 保存运动实例的引用,方便后续修改
        const circleMotion = myGraphicObject.position.addMotion.each( 
            [-300,-100,0], 
            [300,100,10], 
            this.speed, 
            nc.motionTypes.MoveInCircle 
        );

        // 给swoopValue加回调,每次speed变化时同步更新运动速度
        nc.swoopValue( this, "speed", 10, 10, (newSpeed) => {
            circleMotion.speed = newSpeed;
        });
    }
}

这样调整后,当swoopValue逐步把speed从0提升到10的时候,运动的速度也会跟着同步增加,你就能看到盒子越转越快啦。

备注:内容来源于stack exchange,提问作者Eric Lubin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:09:30