Creator 版本: 测试版本 CocosCreator2.2.0 和 CocosCreator2.3.4
目标平台: Web 和 native 平台
问题描述: 2D粒子未播放完成后未正常移除

const {ccclass, property} = cc._decorator;
@ccclass
export default class LogicUI extends cc.Component {
@property([cc.SpriteFrame])
spriteFrameArr: cc.SpriteFrame[] = [];
onLoad() {
// this.schedule(() => {
// for (let i = 0; i < 20; i++) {
// let wolrd_pos = this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
// let idx = this.randomFromInt(0, this.spriteFrameArr.length - 1);
// this.loadParticle("FEN_1", this.node, this.spriteFrameArr[idx], wolrd_pos);
// }
// }, 3, cc.macro.REPEAT_FOREVER,);
let wolrd_pos = this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
let wPosArr = [];
let spriteFrame = [];
for (let i = 0; i < 20; i++) {
let idx = this.randomFromInt(0, this.spriteFrameArr.length - 1);
spriteFrame.push(this.spriteFrameArr[idx]);
wPosArr.push(wolrd_pos);
}
this.loadParticle2("FEN_1", this.node, spriteFrame, wPosArr);
}
randomFromInt(lowerValue: number, upperValue: number) {
return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
}
loadParticle(url: string, parent: cc.Node, frame: cc.SpriteFrame, wPos: cc.Vec2) {
cc.loader.loadRes(url, cc.ParticleAsset, (err, particle) => {
if (err) {
cc.log(err.toString());
return;
}
let particleNode = new cc.Node("par");
let particleCom = particleNode.addComponent(cc.ParticleSystem);
particleNode.position = parent.convertToNodeSpaceAR(wPos);
particleCom.file = particle;
particleCom.scheduleOnce(() => {
particleCom.custom = true;
particleCom.autoRemoveOnFinish = true;
frame && (particleCom.spriteFrame = frame);
particleCom.positionType = cc.ParticleSystem.PositionType.FREE;
particleCom.resetSystem();
parent.addChild(particleNode);
}, 0);
});
}
loadParticle2(url: string, parent: cc.Node, frame: cc.SpriteFrame[], wPosArr: cc.Vec2[]) {
cc.loader.loadRes(url, cc.ParticleAsset, (err, particle) => {
if (err) {
cc.log(err.toString());
return;
}
for (let i = 0; i < wPosArr.length; i++) {
let particleNode = new cc.Node("par");
let particleCom = particleNode.addComponent(cc.ParticleSystem);
particleNode.position = parent.convertToNodeSpaceAR(wPosArr[i]);
particleCom.file = particle;
particleCom.scheduleOnce(() => {
particleCom.custom = true;
particleCom.autoRemoveOnFinish = true;
frame && (particleCom.spriteFrame = frame[i]);
particleCom.positionType = cc.ParticleSystem.PositionType.FREE;
particleCom.resetSystem();
parent.addChild(particleNode);
}, 0);
}
});
}
}
附工程源码:
CocosDemo2.zip (841.1 KB)