getNodeUnderMouse(nodes, screenX, screenY, allowInactive, allowUntargetable) {
    let inactiveNode;

    if (nodes) {
      if (!_.isArray(nodes)) {
        nodes = [nodes];
      }

      for (let i = 0; i < nodes.length; i++) {
        const node = nodes[i];
        if (node.isVisible() && node.getDisplayedOpacity() > 0.0 && (allowUntargetable || !(node instanceof EntityNode) || node.getIsTargetable()) && UtilsEngine.getNodeUnderMouse(node, screenX, screenY)) {
          // always return an active node first
          if (!(node instanceof EntityNode) || node.getIsActive()) {
            return node;
          } if (inactiveNode == null) {
            inactiveNode = node;
          }
        }
      }

      // fallback to returning inactive node
      if (allowInactive) {
        return inactiveNode;
      }
    }
  }
Return the first cocos node/sprite under the mouse.
@param  {cc.Node|Array} nodes
@param  {Number} screenX
@param  {Number} screenY
@param  {Boolean} [allowInactive=false]
@param  {Boolean} [allowUntargetable=false]
@return {cc.Node}