This is the 9th day of my participation in Gwen Challenge

preface

In the first four chapters (juejin.cn/post/696995…) , (juejin. Cn/post / 697032…). , (juejin. Cn/post / 697068…). , (juejin. Cn/post / 697107…). , (juejin. Cn/post / 697130…). We thoroughly covered how to set up the libGDX development environment, how to run the project, and the role of the modules in the project. By loading resource article, graphics rendering and touch screen, mouse and keyboard to monitor implementation elves moving, basically covers libGDX resource management, graphics rendering, audio playback, and touch screen, the mouse and keyboard input device to monitor the relevant API, this chapter, we will collect articles before, integration of the complete game code.

In order to more clearly describe the functions of each API, we will use a large number of codes and descriptions to explain the functions and uses of each API. Therefore, we will divide the development of small games into four parts. Due to space constraints, we will divide it into three chapters to explain the main contents of each part.

  1. Loading resources
  2. Graphics rendering, screen clearing and sound playback
  3. Mouse keyboard input and movement
  4. Small game complete summary

Small game complete summary

This is our simple game of small source code:

    import java.util.Iterator;

    import com.badlogic.gdx.ApplicationAdapter;
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.Input.Keys;
    import com.badlogic.gdx.audio.Music;
    import com.badlogic.gdx.audio.Sound;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.graphics.g2d.SpriteBatch;
    import com.badlogic.gdx.math.MathUtils;
    import com.badlogic.gdx.math.Rectangle;
    import com.badlogic.gdx.math.Vector3;
    import com.badlogic.gdx.utils.Array;
    import com.badlogic.gdx.utils.ScreenUtils;
    import com.badlogic.gdx.utils.TimeUtils;

    public class Drop extends ApplicationAdapter {
       private Texture dropImage;
       private Texture bucketImage;
       private Sound dropSound;
       private Music rainMusic;
       private SpriteBatch batch;
       private OrthographicCamera camera;
       private Rectangle bucket;
       private Array<Rectangle> raindrops;
       private long lastDropTime;

       @Override
       public void create(a) {
          // load the images for the droplet and the bucket, 64x64 pixels each
          dropImage = new Texture(Gdx.files.internal("droplet.png"));
          bucketImage = new Texture(Gdx.files.internal("bucket.png"));

          // load the drop sound effect and the rain background "music"
          dropSound = Gdx.audio.newSound(Gdx.files.internal("drop.wav"));
          rainMusic = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3"));

          // start the playback of the background music immediately
          rainMusic.setLooping(true);
          rainMusic.play();

          // create the camera and the SpriteBatch
          camera = new OrthographicCamera();
          camera.setToOrtho(false.800.480);
          batch = new SpriteBatch();

          // create a Rectangle to logically represent the bucket
          bucket = new Rectangle();
          bucket.x = 800 / 2 - 64 / 2; // center the bucket horizontally
          bucket.y = 20; // bottom left corner of the bucket is 20 pixels above the bottom screen edge
          bucket.width = 64;
          bucket.height = 64;

          // create the raindrops array and spawn the first raindrop
          raindrops = new Array<Rectangle>();
          spawnRaindrop();
       }

       private void spawnRaindrop(a) {
          Rectangle raindrop = new Rectangle();
          raindrop.x = MathUtils.random(0.800-64);
          raindrop.y = 480;
          raindrop.width = 64;
          raindrop.height = 64;
          raindrops.add(raindrop);
          lastDropTime = TimeUtils.nanoTime();
       }

       @Override
       public void render(a) {
          // clear the screen with a dark blue color. The
          // arguments to clear are the red, green
          // blue and alpha component in the range [0,1]
          // of the color to be used to clear the screen.
          ScreenUtils.clear(0.0.0.2 f.1);

          // tell the camera to update its matrices.
          camera.update();

          // tell the SpriteBatch to render in the
          // coordinate system specified by the camera.
          batch.setProjectionMatrix(camera.combined);

          // begin a new batch and draw the bucket and
          // all drops
          batch.begin();
          batch.draw(bucketImage, bucket.x, bucket.y);
          for(Rectangle raindrop: raindrops) {
             batch.draw(dropImage, raindrop.x, raindrop.y);
          }
          batch.end();

          // process user input
          if(Gdx.input.isTouched()) {
             Vector3 touchPos = new Vector3();
             touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
             camera.unproject(touchPos);
             bucket.x = touchPos.x - 64 / 2;
          }
          if(Gdx.input.isKeyPressed(Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime();
          if(Gdx.input.isKeyPressed(Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime();

          // make sure the bucket stays within the screen bounds
          if(bucket.x < 0) bucket.x = 0;
          if(bucket.x > 800 - 64) bucket.x = 800 - 64;

          // check if we need to create a new raindrop
          if(TimeUtils.nanoTime() - lastDropTime > 1000000000) spawnRaindrop();

          // move the raindrops, remove any that are beneath the bottom edge of
          // the screen or that hit the bucket. In the latter case we play back
          // a sound effect as well.
          for (Iterator<Rectangle> iter = raindrops.iterator(); iter.hasNext(); ) {
             Rectangle raindrop = iter.next();
             raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
             if(raindrop.y + 64 < 0) iter.remove();
             if(raindrop.overlaps(bucket)) { dropSound.play(); iter.remove(); }}}@Override
       public void dispose(a) {
          // dispose of all the native resourcesdropImage.dispose(); bucketImage.dispose(); dropSound.dispose(); rainMusic.dispose(); batch.dispose(); }}Copy the code

This chapter provides a simple example of how to create and write a small game using libGDX. Starting from here doesn’t mean the end. It means that we have briefly understood the general structure of libGDX and several commonly used apis. There are still many technical points of libGDX left uncovered.

If you think the blogger wrote well, welcome to “like, collect, pay attention to” one key three even!