示例#1
0
  /**
   * Draws the objects
   *
   * @param batch
   * @param imageHandler
   */
  public void draw(SpriteBatch batch, ImageHandler imageHandler) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO)) {
      player1.drawWithOffset(batch, 0, -intro_player_offset);

      for (Enemy badGuy : enemies) {
        badGuy.drawWithOffset(batch, 0, intro_enemy_offset);
      }
    } else {
      player1.draw(batch);

      for (Enemy badGuy : enemies) {
        badGuy.draw(batch);
      }

      for (Projectile proj : projectiles) {
        proj.draw(batch);
      }

      for (Explosion exp : explosions) {
        exp.draw(batch);
      }
    }

    scoreText.draw(batch, Integer.toString(score), 10, 750, 4);

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_PAUSED)) {
      pauseMenu.draw(batch);
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_GAME_OVER)) {
      gameOverMenu.draw(batch);
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO_START)) {
      int draw_x = 450;
      int draw_y = 200;
      int size = 8;
      for (Sprite img : startText) {
        img.setPosition(draw_x, draw_y);
        img.setSize((int) (img.getRegionWidth() * size), (int) (img.getRegionHeight() * size));
        img.draw(batch);
        draw_x += img.getRegionWidth() * size;
      }
    }
  }
示例#2
0
  /**
   * Calculates movements and collisions between objects in play
   *
   * @return
   */
  public String calculate() {
    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_PLAYING)) {
      /** *Movement** */
      for (Projectile proj : projectiles) {
        proj.move();
      }
      moveEnemies();

      /** *Collisions** */
      calculatePlayerVsWall();
      calculateProjectileEscape();
      calculateCollisionEnemyVsProjectile();
      if (enemies.isEmpty()) {
        gameStatus = GameConstants.GAME_STATUS_GAME_OVER;
      }
      calculateEnemyReachingPlayer();

      for (Explosion exp : explosions) {
        if (exp.isDead()) {
          exp.dispose();
          explosions.remove(exp);
          break;
        }
      }
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_RETURN))
      return GameConstants.APPLICATION_MENU;

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_RETRY)) loadLevel(1);

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO)) {
      intro_enemy_offset -= intro_speed;
      intro_player_offset--;
      if (intro_enemy_offset <= 0 && intro_player_offset <= 0) {
        gameStatus = GameConstants.GAME_STATUS_INTRO_START;
        intro_start_time = System.currentTimeMillis();
      } else if (intro_enemy_offset < 0) {
        intro_enemy_offset = 0;
      } else if (intro_player_offset < 0) {
        intro_player_offset = 0;
      }
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO_START)) {
      long current = System.currentTimeMillis();
      if (current - intro_start_time >= 1000) {
        startTime = System.currentTimeMillis();
        gameStatus = GameConstants.GAME_STATUS_PLAYING;
      }
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_OUTRO)) {
      if (enemy_hero == null) {
        selectEnemy();
        outro_distance_x = enemy_hero.x - player1.x;
        outro_distance_y = enemy_hero.y - player1.y;
      } else {
        if (calculateOverlap(enemy_hero, player1) || enemy_hero.y <= player1.y) {
          gameStatus = GameConstants.GAME_STATUS_GAME_OVER;
        }

        enemy_hero.x -= outro_distance_x / outro_distance_y;
        enemy_hero.y -= outro_distance_y / outro_distance_y;
      }
    }

    return null;
  }