showFlatBackground(duration, color, zOrder) {
    if (duration == null) { duration = 0.0; }
    if (color == null) { color = this.bgColor; }
    if (zOrder == null) { zOrder = this.bgZOrder; }

    return this.whenRequiredResourcesReady().then((requestId) => {
      if (!this.getAreResourcesValid(requestId)) return; // load invalidated or resources changed

      // remove previous bg
      this.removeBackground(duration);

      // store properties
      this.bgColor = color;
      this.bgZOrder = zOrder;

      // create bg
      this.bg = new cc.DrawNode();
      this.bg.setAnchorPoint(0.5, 0.5);
      this.bg.setPosition(0.0, 0.0);
      this.addChild(this.bg, this.bgZOrder);

      if (this.isRunning()) {
        // resize and draw when this is already running (in scene)
        // otherwise, resize will occur automatically on first init
        this.resizeBackground();
      }

      if (duration != null && duration > 0.0) {
        this.bg.setOpacity(0.0);
        this.bg.fadeTo(duration, 255.0);
      }
    });
  }
Shows a flat color background and returns a promise.
NOTE: this method should only be called after the layer is constructed and added to the scene.
@param {Number} [duration=0.0] time in seconds
@param {cc.Color} [color=this.bgColor]
@param {Number} [zOrder=this.bgZOrder]
@returns {Promise}