libGDX. Урок 11. Еще одна игра на Android Studio

Начинаем создание еще одной игры, которая будет называться «BasketBall». Пользователь должен будет ловить корзиной мячи. Мячи будут случайным образом падать сверху. Мы будем отображать результат игрока. Помимо этого, добавим еще отображение наивысшего результата.

 
Темы, которые мы затронем при разработке этой игры:

  • Создание движущейся корзины;
  • Появление мяча;
  • Обнаружение столкновений;
  • Метание нескольких мячей;
  • Отображение результата и сохранение наивысшего результата;
  • Реализация экрана меню;
  • Добавление звуковых эффектов и музыки;

Создаём движущуюся корзину

Настройте проект, как показано на скриншоте:

libgdx проект

Начнём с реализации основного экрана игры. Импортируйте созданный libGDX проект в Android Studio:

импорт проекта libgdx в android studio

Создайте новый пакет (package) в разделе core, папке com.mygdx.basketball вашего проекта и назовите его gameobjects:

новый пакет в android studio

В получившейся папке – com.mygdx.basketball.gameobjects создайте новый java класс с именем Basket:

новый java класс в android studio

имя java класса

Отредактируйте код файла Basket, как показано внизу:

package com.mygdx.basketball.gameobjects;

import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;


public class Basket {

    public Sprite basketSprite; //спрайт для отображение корзины

    public void render(SpriteBatch batch){
        basketSprite.draw(batch);
    }

    public void setPosition(float x,float y){
        basketSprite.setPosition(x, y);
    }

}

Этот код не нуждается в объяснениях. Здесь все вам должно быть понятно из предыдущих уроков.

 

Реализация класса GameManager

Теперь создайте еще один пакет (package) в разделе core, в папке com.mygdx.basketball и назовите этот пакет managers. В этой папке создайте новый java класс с именем GameManager. Отредактируйте код этого файла, как показано ниже:

package com.mygdx.basketball.managers;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.mygdx.basketball.gameobjects.Basket;


public class GameManager {

    public static Basket basket; // экземпляр корзины
    static Texture basketTexture; // текстура корзины
    public static Sprite backgroundSprite; // спрайт заднего фона
    public static Texture backgroundTexture; // текстура для заднего фона
    private static float BASKET_RESIZE_FACTOR = 3000f; // переменная для масштабирования корзины

    public static void initialize(float width,float height){

        basket = new Basket();
        basketTexture = new Texture(Gdx.files.internal("basket.png"));// загружаем текстуру корзины в наш проект
        basket.basketSprite = new Sprite(basketTexture);// загружаем текстуру корзины в спрайт
        basket.basketSprite.setSize(basket.basketSprite.getWidth()*(width/BASKET_RESIZE_FACTOR), basket.basketSprite.getHeight()*(width/BASKET_RESIZE_FACTOR)); // устанавливаем размер спрайта
        basket.setPosition(0, 0);// установим позицию корзины в левом нижнем углу
        backgroundTexture = new Texture(Gdx.files.internal("background.jpg"));// загружаем текстуру заднего фона в наш проект
        backgroundSprite= new Sprite(backgroundTexture); // загружаем текстуру заднего фона в спрайт
        backgroundSprite.setSize(width, height); // устанавливаем размер заднего фона по размеру экрана предполагаемого устройства
    }

    public static void renderGame(SpriteBatch batch){

        backgroundSprite.draw(batch);
        basket.render(batch);

    }

    public static void dispose() {

        //избавляемся от текстур, чтобы не захламлять память устройства
        backgroundTexture.dispose();
        basketTexture.dispose();

    }

}

Реализация класса BasketBall

Теперь обновим код в файле BasketBall:

package com.mygdx.basketball;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.mygdx.basketball.managers.GameManager;

public class BasketBall extends ApplicationAdapter {

   SpriteBatch batch; // объект для отрисовки спрайтов нашей игры
   OrthographicCamera camera; // область просмотра нашей игры

   @Override
   public void create () {

      // получаем размеры экрана устройства пользователя и записываем их в переменнные высоты и ширины
      float height = Gdx.graphics.getHeight();
      float width = Gdx.graphics.getWidth();
      camera = new OrthographicCamera(width,height);// устанавливаем переменные высоты и ширины в качестве области просмотра нашей игры
      camera.setToOrtho(false);// этим методом мы центруем камеру на половину высоты и половину ширины
      batch = new SpriteBatch();
      //вызываем метод initialize класса GameManager
      GameManager.initialize(width, height);
   }

   @Override
   public void dispose() {

      super.dispose();
      batch.dispose();
      GameManager.dispose();
   }
   @Override
   public void render () {

      Gdx.gl.glClearColor(1, 1, 1, 1);// Очищаем экран
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

      batch.setProjectionMatrix(camera.combined); // устанавливаем в экземпляр spritebatch вид с камеры (области просмотра)
      //отрисовка игровых объектов
      batch.begin();
      GameManager.renderGame(batch);
      batch.end();
   }
}

Не забудьте добавить необходимые нам файлы (изображения, звуки) в папку assets вашего проекта. Их, как и код для этого урока вы можете скачать внизу:

добавление файла в проект android studio

 
Теперь запустив этот проект, вы получите такой промежуточный результат:

игра приложение на android studio с libgdx

Скачать исходники