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

如何实现停止Incisor粒子系统发射新粒子但让现有粒子完成动画

如何实现停止Incisor粒子系统发射新粒子但让现有粒子完成动画

我之前在用Incisor粒子系统时也碰到过一模一样的问题——直接调用playbackController.stop()确实会立刻掐断所有粒子,完全不是我们想要的“让现有粒子自然收尾”的效果。不过别担心,我们可以通过控制发射器的状态来实现预期行为,而不是直接停止整个播放控制器。

核心思路很简单:关掉发射器的新粒子生成功能,但让播放控制器继续运行,直到现有粒子走完它们的生命周期自然消失。给你修改后的代码示例:

class ProjectMain {
    init() {
        let particles = nc.addParticleSystem(nc.particleSystemDefinitions.Fountain, nc.mainScene, "MyParticles");
        particles.playbackController.play();

        nc.waitThen(1, this, "stopParticles");
    }

    stopParticles() {
        // 禁用发射器,停止产生新粒子
        particles.emitter.enabled = false;
        
        // 可选:如果需要在所有粒子消失后彻底停止播放控制器,可添加这段监听
        const checkRemainingParticles = () => {
            if (particles.activeParticleCount === 0) {
                particles.playbackController.stop();
                clearInterval(checkInterval);
            }
        };
        const checkInterval = setInterval(checkRemainingParticles, 100);
    }
}

关键细节说明:

  1. 禁用发射器:通过particles.emitter.enabled = false关闭粒子发射逻辑,这样不会有新粒子生成,但已经存在的粒子会继续执行它们的动画(比如移动、透明度变化、消失等),直到走完预设的生命周期。
  2. 可选的收尾处理:如果希望所有粒子消失后彻底停止播放控制器,可以定时检查activeParticleCount(假设Incisor提供这个属性),当粒子数为0时再调用stop()。如果不需要严格终止播放控制器,这一步可以省略——没有新粒子发射后,系统会自动处于空闲状态,不会有性能损耗。

如果你的Incisor版本里没有emitter.enabled属性,也可以尝试设置发射器的发射速率为0:particles.emitter.emitRate = 0,能达到同样的效果。

备注:内容来源于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 11:54:36