纯脚本实现粒子系统的效果不对啊

    cc.assetManager.loadBundle('particleBundle', (err, bundle) => {
        bundle.load("particle_texture", cc.ParticleAsset, function (err, resParticleAsset) {
            if (err) {
                return;
            }

	        var particleNode = new cc.Node();
	        var particle = particleNode.addComponent(cc.ParticleSystem);

            particle.file = resParticleAsset;
            particle.custom = true;
            
            
            //添加到场景中
            this.node.addChild(particleNode);
        });
    });    

用这种方法,无论加载的是什么样的粒子系统,结果都是个冒泡样子的粒子。请问有没有大佬遇到过这问题?谢谢!

需要调参数吧,可以编辑器里预览调整好以后,把参数在代码中设置一遍

感谢回复,难道不能通过动态加载plist文件直接展现该plist的粒子效果吗?

cocos粒子系统的发射好像要各种调参数才能调出我们想要的效果 :joy:

你看到的就是默认参数下的效果

就是觉得挺奇怪,直接在场景里创建粒子节点,然后拖拽关联plist文件就能看到该plist文件的正确粒子效果。那为什么通过脚本加载plist文件就不行呢?其他图片之类的资源,你是在场景里静态创建,或者代码动态加载,效果是一样的。为啥粒子系统就不行?感觉怪怪的

是不是文件没有设置成功呢?

应该设置成功了,因为如果把文件名改为一个不存在的粒子资源,那就加载不到粒子资源,从err那里return了。
奇怪的就是,现在肯定加载到粒子资源了,但就是无论加载什么粒子资源,结果都是一个冒泡的粒子效果

你试一下在这之后调用一下
particle._applyFile()

嗯。。。。还是咕嘟咕嘟冒泡,呵呵。
_applyFile是啥方法啊,我在ParticleSystem里面没查到有这个方法啊

https://github.com/cocos-creator/engine/blob/5a29bc48b8b66d479bb93d92e64418ce8a7c0f34/cocos2d/particle/CCParticleSystem.js#L996

嗯,加上particle._applyFile()也还是没用,唉,真是有点发愁。。。。

编辑器里预览调整好以后,把参数在代码中设置一遍这方法,可以大体把粒子效果弄的差不多,但就是颜色即使按编辑器里面的设置,也和实际plist的效果不符合。。。。。
按照编辑器里设置颜色是下面这样设置,出来的粒子效果是单色的。但plist效果是比较绚烂的颜色。。。。
particle.startColor = new cc.Color(255, 102, 51, 224);

particle.startColorVar = new cc.Color(0, 0, 0, 0);

particle.endColor = new cc.Color(0, 0, 0, 255);

particle.endColorVar = new cc.Color(0, 0, 0, 0);

既然你都这么做了,我比较建议直接做成粒子预制件~这种应该能避免代码设置带来的各种问题

粒子预制件的方法是啥意思?能否指点一二
我以前用另外一种方法实现过,就是在场景里面静态创建一个粒子节点,然后需要粒子效果时,把那个粒子节点的指针取过来(其实就是个节点的赋值语句,姑且理解为指针吧),然后particle.stopSystem(); particle.resetSystem();就能播放粒子效果了,不知道这是不是您说的预制件的方法?
我这次没用这方法是因为可能随机有多个粒子系统同时播放,如果都取那一个指针,可能会有问题。以前同一时间只会有一个粒子系统播放,所以肯定没问题

哦,您是说建立一个prefab?然后每次加载那个prefab?

粒子上的图片?

现在其实粒子的大概效果已经出来了,但颜色不对,可能就是spriteFrame之类的地方有问题,也就是您说的图片。。。。

我以前有的粒子系统(比如那种天女散花)的效果,花朵的spriteFrame自己弄好一个(也就是弄好粒子系统中的一朵花就可以了,particle.spriteFrame = mySpriteFrame;),然后按编辑器里面的属性,用代码把所有属性都设置一遍,就可以。但这次是那种五颜六色的烟花效果,没法弄一个spriteFrame啊

就是你在编辑器做好的粒子效果,拖到资源管理器里,它就会变成一个预制件

嗯嗯,此计甚妙,目前这可能是最理想的实现方案了。虽然搞不清为啥动态加载plist不行(也搞不清为啥动态用代码全设置一遍属性也有小问题),但也不纠结了,改成动态加载prefab了。能解决就OK了,非常感谢!

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。