void autoUpdate() {
    if (hasTitle()) {
      return;
    }

    for (Shape s : allShapes) {
      s.autoUpdate();
    }

    Iterator<Shape> iter = allShapes.iterator();
    while (iter.hasNext()) {
      Shape s = iter.next();
      s.update();
      if (s.isDestroyed()) {
        if (s.isSolid()) {
          removeSolid(s);
        }
        removeFromLayers(s);
        iter.remove();
      }
    }
  }
 /**
  * Removes the given audio event listener from being notified of future audio events, if it was
  * present. If not present, has no effect.
  */
 public static void removeAudioEventListener(AudioEventListener listener) {
   listeners.remove(listener);
 }
 /**
  * Removes all audio event listeners from being notified of future audio events, if any were
  * present. If none were present, has no effect.
  */
 public static void clearAudioEventListeners() {
   listeners.clear();
 }
 public static void addAudioEventListener(AudioEventListener listener) {
   listeners.add(listener);
 }
 /**
  * Returns an array of all shapes currently in the game.
  *
  * @return an array of all shapes currently in the game.
  */
 public static Shape[] getAllShapes() {
   return allShapes.toArray(new Shape[0]);
 }
 static void removeShape(Shape shape) {
   allShapes.remove(shape);
   removeFromLayers(shape);
 }
 static void addShape(Shape shape) {
   allShapes.add(shape);
 }
 static void removeSolid(Shape shape) {
   solidShapes.remove(shape);
 }
 static void addSolid(Shape shape) {
   solidShapes.add(shape);
 }
 static Shape[] getSolids() {
   return solidShapes.toArray(new Shape[0]);
 }