@Override
  public void render(float delta) {
    Gdx.gl.glClearColor(1F, 1F, 1F, 1F);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.begin();
    batch.draw(Assets.background, 0, 0, W, H);
    batch.end();

    switch (state) {
      case PAUSE:
        batch.begin();
        batch.draw(
            Assets.avoid,
            (W / 2) - (Assets.avoid.getWidth() / 2),
            H - (augH + Assets.avoid.getHeight()));
        batch.draw(Assets.touch, (W / 2) - (Assets.touch.getWidth() / 2), augH);
        batch.draw(Assets.player, player.getPosition().x, player.getPosition().y);
        batch.end();
        Timer.schedule(
            new Task() {
              @Override
              public void run() {
                touch();
              }
            },
            0.3f);

        break;
      case RUN:
        if (playing) {
          if (gameover == false) {
            time += Gdx.graphics.getDeltaTime();
            meteorIterator = meteor.iterator();
            while (meteorIterator.hasNext()) {
              Meteor cur = meteorIterator.next();
              cur.update();
              batch.begin();
              batch.draw(
                  Assets.meteor,
                  cur.getPosition().x,
                  cur.getPosition().y,
                  Assets.meteor.getWidth() / 2f,
                  Assets.meteor.getHeight() / 2f,
                  Assets.meteor.getWidth(),
                  Assets.meteor.getHeight(),
                  1,
                  1,
                  cur.getMetSp().getRotation(),
                  0,
                  0,
                  Assets.meteor.getWidth(),
                  Assets.meteor.getHeight(),
                  false,
                  false);
              batch.end();
              cur.getMetSp().rotate(8f);
              if (Intersector.overlaps(cur.getmBounds(), player.getpBounds())) {
                gameover = true;
              }
            }
            enemyIterator = enemy.iterator();
            enemyIterator = enemy.iterator();
            while (enemyIterator.hasNext()) {
              Enemy cur = enemyIterator.next();
              cur.update();
              batch.begin();
              batch.draw(
                  Assets.enemy1,
                  cur.getPosition().x,
                  cur.getPosition().y,
                  scX / 2f,
                  scY / 2f,
                  scX,
                  scY,
                  1,
                  1,
                  cur.getRotate().getRotation());
              batch.end();
              cur.getRotate().rotate(-5f);
              if (Intersector.overlaps(cur.getBounds(), player.getpBounds())) {
                gameover = true;
              }
            }
            batch.begin();
            if (time > 40) {
              e2.update();
              batch.draw(Assets.enemy2, e2.getPosition().x, e2.getPosition().y);
              if (Intersector.overlaps(player.getpBounds(), e2.getBounds())) {
                gameover = true;
              }
            }
            if (Assets.H && !Assets.N) {
              if (time > 80) {
                e4.update();
                batch.draw(Assets.enemy2, e4.getPosition().x, e4.getPosition().y);
                if (Intersector.overlaps(player.getpBounds(), e2.getBounds())) {
                  gameover = true;
                }
              }
            }
            batch.draw(Assets.player, player.getPosition().x, player.getPosition().y);
            batch.end();
          } else {
            if (Assets.N) {
              Assets.setBestTime(time, true);
            } else {
              Assets.setBestTime(time, false);
            }
            Assets.setCurrentTime(time);
            exp.currentFrame = exp.anime.getKeyFrame(delta, false);
            batch.begin();
            batch.draw(exp.currentFrame, player.getPosition().x, player.getPosition().y);
            batch.end();
            if (!Assets.boom.isPlaying()) {
              Assets.boom.play();
            }
            Timer.schedule(
                new Task() {
                  @Override
                  public void run() {
                    playing = false;
                  }
                },
                0.7f);
          }
        } else {
          game.setScreen(new Replay(game));
        }

        if (gameover == false) {
          player.movement();
          player.update();
        } else if (gameover) {
          Assets.bgm.stop();
        }
        break;
    }
  }