コード例 #1
0
ファイル: Player.java プロジェクト: dominikWin/TankGame
  /**
   * Updates the player based on the controls.
   *
   * @param time
   */
  public void update(double time) {
    double x = location.getX(), y = location.getY(), angle = bodyAngle;
    if (Input.getKey(Keyboard.KEY_W)) {
      location = new Vector2d(location, bodyAngle, time * DRIVE_SPEED_FOREWARD);
    }
    if (Input.getKey(Keyboard.KEY_A)) {
      bodyAngle -= TURNING_SPEED * time;
    }
    if (Input.getKey(Keyboard.KEY_S)) {
      location = new Vector2d(location, 180 + bodyAngle, time * DRIVE_SPEED_BACKWARD);
    }
    if (Input.getKey(Keyboard.KEY_D)) {
      bodyAngle += TURNING_SPEED * time;
    }

    if (Collision.isPlayerIntersectingMap(this)) {
      location = new Vector2d(x, y);
      bodyAngle = angle;
    }

    // gunAngle = new Vector2d(Input.getMousePosition()., y)

    Vector2d mouseLoc =
        Vector2d.add(
            Input.getMousePosition(),
            new Vector2d(location.getX() - Game.WIDTH / 2, location.getY() - Game.HEIGHT / 2));
    Vector2d relative = Vector2d.add(location.inverse(), mouseLoc);

    double mouseAngle = Math.toDegrees(Math.atan2(relative.getY(), relative.getX()));

    gunAngle = mouseAngle;

    if (Collision.isPlayerIntersectingBullet()) {
      kill();
    }

    if (Input.getKey(Keyboard.KEY_SPACE)
        && lastFireTime + FIRE_DELAY_MILS < System.currentTimeMillis()) {
      Game.getWorld()
          .getBullets()
          .add(
              new Bullet(
                      new Vector2d(
                          location, gunAngle, TankModel.GUN_LENGTH + TankModel.GUN_OFFSET_LENGTH),
                      gunAngle,
                      BULLET_SPEED)
                  .removeFromPlayer());
      lastFireTime = System.currentTimeMillis();
    }

    while (gunAngle < 0) {
      gunAngle += 360;
    }
    while (bodyAngle < 0) {
      bodyAngle += 360;
    }

    gunAngle %= 360;
    bodyAngle %= 360;
  }
コード例 #2
0
ファイル: Player.java プロジェクト: dominikWin/TankGame
 public int getMapLocationY() {
   return (int) (location.getY() / Map.BLOCK_SIZE);
 }