ctor(options) {
    // initialize properties that may be required in init
    this._worldPositionForParticle = cc.p();
    this._sourceScreenOffsetPosition = cc.p();
    this._targetScreenOffsetPosition = cc.p();
    this._impacts = [];

    // find plist file
    let plistFile;
    if (typeof options === 'string') {
      plistFile = options;
    } else {
      plistFile = options.plistFile || options.plist || this.plistFile;
    }

    // do super ctor
    this._super(plistFile);

    // apply options
    if (_.isObject(options)) {
      this.setOptions(options);
    }

    // set auto remove when duration is not forever
    if (this.getDuration() !== -1 && !this.emitFX && !this.emitOnImpact && !this.isAutoRemoveOnFinish() && (!options || typeof options.autoRemoveOnFinish === 'undefined')) {
      this.setAutoRemoveOnFinish(true);
    }

    this.updateSourceToTarget();
  }
*************************************************************************
 BaseParticleSystem
 var BaseParticleSystem = cc.ParticleSystem
 BaseParticleSystem.create()
**************************************************************************