docs: function SpriteBatchNode (opts) {
      SpriteBatchNode.superclass.constructor.call(this, opts)
  
      var file         = opts.file
        , url          = opts.url
        , textureAtlas = opts.textureAtlas
        , texture      = opts.texture
  
      if (url || file || texture) {
          this.ready = url ? false : true
          textureAtlas = new TextureAtlas({url: url, file: file, texture: texture})
  
          if (!this.ready) {
              events.addListenerOnce(textureAtlas, 'load', function () {
                  this.ready = true
              }.bind(this))
          }
      }
  
      this.textureAtlas = textureAtlas
  
      // FIXME This listener needs to be added/remove onEnter/onExit to avoid memory leaks
      events.addPropertyListener(this, 'opacity', 'change', function () {
          for (var i = 0, len = this.children.length; i < len; i++) {
              var child = this.children[i]
              child.opacity = this.opacity
          }
      }.bind(this))
  
  }