暂停/恢复适用于Android的简单Libgdx游戏

吉加·潘迪

目前,我正在尝试使用针对Android平台的libgdx实现简单的游戏。我已经实现了游戏,但不知道如何根据用户输入来暂停和继续游戏。请提出想法以及一些实现该想法的实用代码。我使用的是libgdx库中演示的简单游戏代码。谢谢。

这是代码:

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

   @Override
   public void create() {
      // 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() {
      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() {
      // clear the screen with a dark blue color. The
      // arguments to glClearColor are the red, green
      // blue and alpha component in the range [0,1]
      // of the color to be used to clear the screen.
      Gdx.gl.glClearColor(0, 0, 0.2f, 1);
      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

      // 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 later case we play back
      // a sound effect as well.
      Iterator<Rectangle> iter = raindrops.iterator();
      while(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() {
      // dispose of all the native resources
      dropImage.dispose();
      bucketImage.dispose();
      dropSound.dispose();
      rainMusic.dispose();
      batch.dispose();
   }

   @Override
   public void resize(int width, int height) {
   }

   @Override
   public void pause() {
   }

   @Override
   public void resume() {
   }
}
本恩克斯

最简单的事情是,您添加一个枚举:

public enum State
{
    PAUSE,
    RUN,
    RESUME,
    STOPPED
}

并修改您的渲染方法

private State state = State.RUN;

@Override
public void render()
{
    switch (state)
    {
    case RUN:
//do suff here
        break;
    case PAUSE:
//do stuff here

        break;
    case RESUME:

        break;

    default:
        break;
    }
}

也使用来自android的回调。例如,使用来自libgdx的回调来更改状态:

@Override
public void pause()
{
    this.state = State.PAUSE;
}

@Override
public void resume()
{
    this.state = State.RESUME;
}

还要为状态添加诸如setMethod之类的内容,以便您可以在userevent上对其进行更改。

public void setGameState(State s){
    this.state = s;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

适用于Android的libGDX动画

来自分类Dev

适用于Ubuntu的简单和低资源游戏?

来自分类Dev

适用于Android的简单Jsoup代码

来自分类Dev

适用于Android的简单datpicker

来自分类Dev

暂停和恢复不适用于ASUS X54CBBK3

来自分类Dev

暂停和恢复不适用于ASUS X54CBBK3

来自分类Dev

适用于Android的2D游戏引擎

来自分类Dev

适用于Android游戏的视觉效果库

来自分类Dev

适用于Android游戏的分辨率独立的图形

来自分类Dev

是否可以将Google Play游戏服务实时多人游戏集成到适用于Android和iOS的LibGDX中?

来自分类Dev

适用于Android的Google Analytics(分析)EventTracker的简单示例

来自分类Dev

适用于Android的Google Analytics(分析)EventTracker的简单示例

来自分类Dev

适用于C#电脑游戏(WinForms)的简单,快速的实时图形

来自分类Dev

适用于游戏的PhoneGap,是还是否?

来自分类Dev

libgdx inputListener 不适用于演员

来自分类Dev

OpenGL中唯一适用于Android的游戏:C ++(NDK)与Java(Dalvik)的性能

来自分类Dev

适用于Android NDK JNI游戏的SDL中的倾斜控制

来自分类Dev

OpenGL中唯一适用于Android的游戏:C ++(NDK)与Java(Dalvik)的性能

来自分类Dev

适用于Android的GameMaker游戏中的操纵杆支持

来自分类Dev

Pluralsight使用Java构建适用于Android和PC的首款游戏

来自分类Dev

适用于Android的OpenSSL

来自分类Dev

适用于Android的Pusher

来自分类Dev

适用于Android的Rhino

来自分类Dev

适用于 Android 的 isInViewport

来自分类Dev

暂停功能适用于Java 6而不适用于Java 7

来自分类Dev

Libgdx中的暂停和恢复

来自分类Dev

适用于工作的Linux,适用于游戏的虚拟Windows?

来自分类Dev

改造和简单的问题-尝试制作适用于Android的RSS阅读器

来自分类Dev

适用于Android的简单计算器应用程序

Related 相关文章

  1. 1

    适用于Android的libGDX动画

  2. 2

    适用于Ubuntu的简单和低资源游戏?

  3. 3

    适用于Android的简单Jsoup代码

  4. 4

    适用于Android的简单datpicker

  5. 5

    暂停和恢复不适用于ASUS X54CBBK3

  6. 6

    暂停和恢复不适用于ASUS X54CBBK3

  7. 7

    适用于Android的2D游戏引擎

  8. 8

    适用于Android游戏的视觉效果库

  9. 9

    适用于Android游戏的分辨率独立的图形

  10. 10

    是否可以将Google Play游戏服务实时多人游戏集成到适用于Android和iOS的LibGDX中?

  11. 11

    适用于Android的Google Analytics(分析)EventTracker的简单示例

  12. 12

    适用于Android的Google Analytics(分析)EventTracker的简单示例

  13. 13

    适用于C#电脑游戏(WinForms)的简单,快速的实时图形

  14. 14

    适用于游戏的PhoneGap,是还是否?

  15. 15

    libgdx inputListener 不适用于演员

  16. 16

    OpenGL中唯一适用于Android的游戏:C ++(NDK)与Java(Dalvik)的性能

  17. 17

    适用于Android NDK JNI游戏的SDL中的倾斜控制

  18. 18

    OpenGL中唯一适用于Android的游戏:C ++(NDK)与Java(Dalvik)的性能

  19. 19

    适用于Android的GameMaker游戏中的操纵杆支持

  20. 20

    Pluralsight使用Java构建适用于Android和PC的首款游戏

  21. 21

    适用于Android的OpenSSL

  22. 22

    适用于Android的Pusher

  23. 23

    适用于Android的Rhino

  24. 24

    适用于 Android 的 isInViewport

  25. 25

    暂停功能适用于Java 6而不适用于Java 7

  26. 26

    Libgdx中的暂停和恢复

  27. 27

    适用于工作的Linux,适用于游戏的虚拟Windows?

  28. 28

    改造和简单的问题-尝试制作适用于Android的RSS阅读器

  29. 29

    适用于Android的简单计算器应用程序

热门标签

归档