2016-10-30 4 views
0

Я пытаюсь приостановить свою игру, нажав кнопку. Но я не могу.Я не могу приостановить свою игру в LibGDX

Что является самым простым способом приостановить игру и продолжить?

Ниже приведен весь мой код. Я знаю, что это беспорядок, но я действительно новичок в этом.

public class PlayScreen implements Screen{ 

    FlapAndFly faf = new FlapAndFly(); 
    SpriteBatch sb; 
    Random rnd; 
    Ucak player; 
    BigBoss boss; 
    float ani =1f; 
    Vector2 vec; 
    Rectangle ucakRect,upRect,downRect,mermiRect,fireRect,rightRect,leftRect,bossRect,bossMermiRect,tavanRect,tabanRect; 
    Vector2 yercekimi = new Vector2(); 
    Vector2 pos = new Vector2(); 
    Vector3 touchPoint; 
    OrthographicCamera cam; 
    float x = 0; 
    float boy; 
    TextureRegion arka, arka1,arka2,arka3,arka4; 
    Kayalar[] altkayalar = new Kayalar[50]; 
    Enemy[] enemy = new Enemy[50]; 

    Kayalar[] ustKayalar = new Kayalar[50]; 
    Rectangle[] altRect = new Rectangle[50]; 
    Rectangle[] ustRect = new Rectangle[50]; 
    Rectangle[] enemyRect = new Rectangle[50]; 

    Mermi tekMermi,bossMermi; 
    Animation bomba; 
    int skor = 0; 
    Vector2 mermiVec; 
    Vector2 bossMermiVec; 
    Vector2 enemyVec; 
    Vector2 bossVec; 
    boolean dus=false; 
    boolean playerDus = false; 
    ShapeRenderer sr; 
    boolean ates = false; 
    boolean bossAtes = false; 
    boolean doldur = true; 
    float s= 0; 
    boolean bom = false; 
    public int a; 
    boolean right = true, left = false, up = false, down = false, savas = false; 
    boolean ucakBom = false; 
    float playerGuc = 1; 
    float bossGuc = Gdx.graphics.getWidth()/6; 
    Music play = Gdx.audio.newMusic(Gdx.files.internal("play.mp3")); 


    Rectangle lazerRect,lazerbuttonRect,pauseRect; 
    Lazer lazer; 
    Vector2 lazerVec; 
    boolean lazerAtes = false; 
    Sound lSound = Gdx.audio.newSound(Gdx.files.internal("lazer.wav")); 
    Sound gunSound = Gdx.audio.newSound(Gdx.files.internal("gun.wav")); 
    Sound playerSound = Gdx.audio.newSound(Gdx.files.internal("heli.wav")); 
    Sound bossSound = Gdx.audio.newSound(Gdx.files.internal("boss.wav")); 
    boolean pause = false; 


    public PlayScreen(FlapAndFly faf) { 
     super(); 
     this.faf = faf; 

    } 

    @Override 
    public void show() { 
     Dosyalar.yükle(); 
     play.setVolume(0.5f); 
     play.play(); 
     playerSound.loop(); 

     sb = new SpriteBatch(); 
     sr = new ShapeRenderer(); 
     rnd = new Random(); 
     bomba = new Animation(0.1f, Dosyalar.boomReg1,Dosyalar.boomReg2,Dosyalar.boomReg3,Dosyalar.boomReg4,Dosyalar.boomReg5); 
     bomba.setPlayMode(Animation.PlayMode.LOOP); 
     pos.x = 0; 
     pos.y = 0; 
     boy = 0; 
     enemyVec = new Vector2(pos.x + Gdx.graphics.getWidth()/2 ,boy); 
     player = new Ucak(); 
     player.ucakOlustur(0.03f, Dosyalar.ucak1Reg, Dosyalar.ucak2Reg, Dosyalar.ucak3Reg); 

     for(int i = 0; i<altkayalar.length; i++){ 

      boy = rnd.nextInt((Gdx.graphics.getHeight()-Gdx.graphics.getHeight()/3)); 
      enemyVec.y = rnd.nextInt(Gdx.graphics.getHeight()-Gdx.graphics.getHeight()/2) + Gdx.graphics.getHeight()/4; 
      ustKayalar[i] = new Kayalar(Dosyalar.kayaUstReg, pos.x+Gdx.graphics.getWidth()/2, 
         Gdx.graphics.getHeight()-boy, Gdx.graphics.getWidth()/11, boy); 

      altkayalar[i] = new Kayalar(Dosyalar.kayaReg, pos.x+Gdx.graphics.getWidth(), pos.y, Gdx.graphics.getWidth()/11, boy); 
      altRect[i] = new Rectangle(altkayalar[i].x + altkayalar[i].width /2 , altkayalar[i].y , altkayalar[i].width/18, altkayalar[i].height); 
      ustRect[i] = new Rectangle(ustKayalar[i].x + ustKayalar[i].width/2, ustKayalar[i].y, ustKayalar[i].width/18, ustKayalar[i].height); 
      enemy[i] = new Enemy(Dosyalar.enemyReg, enemyVec.x, enemyVec.y,Gdx.graphics.getWidth()/15, Gdx.graphics.getHeight()/10);   
      pos.x+=(Gdx.graphics.getWidth()); 
      enemyVec.x+=(float) rnd.nextInt((int)(Gdx.graphics.getWidth())+Gdx.graphics.getWidth()/3); 

     } 

     vec = new Vector2(Gdx.graphics.getWidth()/30, Gdx.graphics.getHeight()/2-(Dosyalar.ucak1Reg.getRegionHeight()/2)); 
     yercekimi.set(Gdx.graphics.getWidth()/250, 0); 
     cam = new OrthographicCamera(); 
     cam.setToOrtho(false, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());  
     mermiVec = new Vector2(); 


     bossVec = new Vector2(Gdx.graphics.getWidth(),Gdx.graphics.getHeight()*3/2); 
     boss = new BigBoss(Dosyalar.heliReg1,Dosyalar.heliReg2,Gdx.graphics.getWidth()/6, 
       Gdx.graphics.getHeight()/3,Gdx.graphics.getWidth()*2,Gdx.graphics.getHeight(), 0.01f); 

     bossMermiVec = new Vector2(); 
     boss.ucakOlustur(); 

     lazerVec = new Vector2(cam.position.x - Gdx.graphics.getWidth(), cam.position.y- Gdx.graphics.getHeight()/2); 
    } 

    @Override 
    public void render(float delta) { 

     Gdx.gl.glClearColor(0, 1, 0, 0); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 


     sb.setProjectionMatrix(cam.combined); 

     sb.begin(); 
     sb.draw(Dosyalar.arkaPlanReg, x - Gdx.graphics.getWidth(), 0,(float) (Gdx.graphics.getWidth()), (float)(Gdx.graphics.getHeight())); 
     sb.draw(Dosyalar.arkaPlanReg1, x, 0,(float) (Gdx.graphics.getWidth()), (float)(Gdx.graphics.getHeight())); 
     sb.draw(Dosyalar.arkaPlanReg2, x+Gdx.graphics.getWidth(), 0,(float) (Gdx.graphics.getWidth()), (float)(Gdx.graphics.getHeight())); 
     sb.draw(Dosyalar.arkaPlanReg3, x+(Gdx.graphics.getWidth()*2), 0,(float) (Gdx.graphics.getWidth()), (float)(Gdx.graphics.getHeight())); 
     sb.draw(Dosyalar.arkaPlanReg4, x+(Gdx.graphics.getWidth()*3), 0,(float) (Gdx.graphics.getWidth()), (float)(Gdx.graphics.getHeight())); 
     sb.end(); 

       for(int i = 0; i < altkayalar.length; i++){ 

        enemyRect[i] = new Rectangle(enemy[i].x, enemy[i].y,enemy[i].width,enemy[i].height);  

        altkayalar[i].create(sb); 
        ustKayalar[i].create(sb); 
        altRect[i] = new Rectangle(altkayalar[i].x + altkayalar[i].width /2 , altkayalar[i].y , altkayalar[i].width/18, altkayalar[i].height); 
        ustRect[i] = new Rectangle(ustKayalar[i].x + ustKayalar[i].width/2, ustKayalar[i].y, ustKayalar[i].width/18, ustKayalar[i].height); 
       } 


     sb.begin(); 
     sb.draw(Dosyalar.ustReg, x-(Gdx.graphics.getWidth()), Gdx.graphics.getHeight()-(Gdx.graphics.getHeight()/5),Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.ustReg1, x, Gdx.graphics.getHeight()-(Gdx.graphics.getHeight()/5),Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.ustReg2, x+(Gdx.graphics.getWidth()), Gdx.graphics.getHeight()-(Gdx.graphics.getHeight()/5),Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.ustReg3, x+(Gdx.graphics.getWidth()*2), Gdx.graphics.getHeight()-(Gdx.graphics.getHeight()/5),Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5);   
     sb.draw(Dosyalar.ustReg4, x+(Gdx.graphics.getWidth()*3), Gdx.graphics.getHeight()-(Gdx.graphics.getHeight()/5),Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 

     sb.draw(Dosyalar.altReg, x -Gdx.graphics.getWidth(), 0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.altReg1, x, 0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.altReg2, x+(Gdx.graphics.getWidth()), 0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.altReg3, x+(Gdx.graphics.getWidth()*2), 0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 
     sb.draw(Dosyalar.altReg4, x+(Gdx.graphics.getWidth()*3), 0,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/5); 

     sb.end(); 

     player.ucakCiz(sb, player.ucak.getKeyFrame(ani), vec.x, vec.y, Gdx.graphics.getWidth()/15, Gdx.graphics.getHeight()/10); 

     for(int i = 0; i < altkayalar.length; i++){ 

      enemy[i].create(sb); 
      enemy[i].gel(Gdx.graphics.getWidth()/250); 

      } 

     sb.begin(); 

     sb.draw(Dosyalar.controlReg, cam.position.x - (float)(Gdx.graphics.getWidth()/2),Gdx.graphics.getHeight()/15,(Gdx.graphics.getWidth()/6), (Gdx.graphics.getHeight()/4));   
     sb.draw(Dosyalar.fireReg,cam.position.x + (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/7),Gdx.graphics.getHeight()/15,(Gdx.graphics.getWidth()/11), (Gdx.graphics.getHeight()/6)); 
     sb.draw(Dosyalar.ekranReg, cam.position.x - Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()-Gdx.graphics.getHeight()/8,Gdx.graphics.getWidth()/4,Gdx.graphics.getHeight()/8); 
     sb.draw(Dosyalar.lazerReg,cam.position.x + (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/4),Gdx.graphics.getHeight()/15,(Gdx.graphics.getWidth()/11), (Gdx.graphics.getHeight()/6)); 
     sb.draw(Dosyalar.pauseReg, cam.position.x + Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/16 , cam.position.y + Gdx.graphics.getHeight()/2 - Gdx.graphics.getHeight()/9,(Gdx.graphics.getWidth()/16), Gdx.graphics.getHeight()/9); 
     sb.end(); 

     pauseRect = new Rectangle(cam.position.x + Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/16 , cam.position.y + Gdx.graphics.getHeight()/2 - Gdx.graphics.getHeight()/9,(Gdx.graphics.getWidth()/16), Gdx.graphics.getHeight()/9); 
     ucakRect = new Rectangle(vec.x+player.width/4, vec.y,player.width/3*2, player.height); 
     bossRect = new Rectangle(boss.x, boss.y, boss.width, boss.height); 

     upRect = new Rectangle(cam.position.x - (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/20),Gdx.graphics.getHeight()/5,(Gdx.graphics.getWidth()/15), (Gdx.graphics.getHeight()/7)); 
     downRect = new Rectangle(cam.position.x - (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/20),Gdx.graphics.getHeight()/20,(Gdx.graphics.getWidth()/15), (Gdx.graphics.getHeight()/7)); 
     rightRect = new Rectangle(cam.position.x - (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/10),Gdx.graphics.getHeight()/8,(Gdx.graphics.getWidth()/15), (Gdx.graphics.getHeight()/7)); 
     leftRect = new Rectangle (((cam.position.x -Gdx.graphics.getWidth()/2)),Gdx.graphics.getHeight()/8,(Gdx.graphics.getWidth()/15), (Gdx.graphics.getHeight()/7)); 

     tekMermi = new Mermi(mermiVec.x, ucakRect.y, ucakRect.width/8*3, ucakRect.height/8*3, Dosyalar.bulletReg); 
     bossMermi = new Mermi(bossMermiVec.x + ucakRect.width/8*3 , bossRect.y + ucakRect.height/8*3, ucakRect.width/8*3, ucakRect.height/8*3, Dosyalar.bossBulletReg); 

     mermiRect = new Rectangle(tekMermi.x,tekMermi.y,tekMermi.width,tekMermi.height); 
     fireRect = new Rectangle(cam.position.x + (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/7),Gdx.graphics.getHeight()/15,(Gdx.graphics.getWidth()/11), (Gdx.graphics.getHeight()/6)); 

     bossMermiRect = new Rectangle(bossMermi.x,bossMermi.y,bossMermi.width,bossMermi.height); 
     tavanRect = new Rectangle(cam.position.x -Gdx.graphics.getWidth()/2, cam.position.y + Gdx.graphics.getHeight()/2- Gdx.graphics.getHeight()/7 , Gdx.graphics.getWidth(),Gdx.graphics.getHeight()/7); 
     tabanRect = new Rectangle(cam.position.x -Gdx.graphics.getWidth()/2, cam.position.y - Gdx.graphics.getHeight()/2, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/7); 

     lazer = new Lazer(sr, lazerVec.x, lazerVec.y, Gdx.graphics.getWidth()/45, Gdx.graphics.getHeight()); 
     lazerRect = new Rectangle(lazer.x,lazer.y, lazer.width,lazer.height); 
     lazerbuttonRect = new Rectangle(cam.position.x + (Gdx.graphics.getWidth()/2 - Gdx.graphics.getWidth()/4),Gdx.graphics.getHeight()/15,(Gdx.graphics.getWidth()/11), (Gdx.graphics.getHeight()/6)); 


     tekMermi.render(sb); 
     bossMermi.render(sb); 
     boss.ucakCiz(sb); 

     vec.add(yercekimi); 


     for(int z = 0; z<2; z++){ 

      if (Gdx.input.isTouched(z)) { 

      touchPoint = new Vector3(Gdx.input.getX(z), Gdx.input.getY(z),0); 
      cam.unproject(touchPoint); 
      } 
     } 



     if(Gdx.input.justTouched()){ 

      if(pauseRect.contains(touchPoint.x,touchPoint.y)){ 

       pause = true; 
      } 

      if(fireRect.contains(touchPoint.x,touchPoint.y)){ 

       ates = true; 
       doldur = false; 

      } 

      if(lazerbuttonRect.contains(touchPoint.x,touchPoint.y)){ 

       if(playerGuc > 1){  

        System.out.println("lazsrerr"); 
        lazerVec.x = cam.position.x - Gdx.graphics.getWidth()/2 - lazer.width*3; 
        playerGuc -=5; 
        lazerAtes = true; 

         } 
       else{ 



        } 
      } 
     } 

     if(pause){ 

      Gdx.graphics.setContinuousRendering(false); 

      } 

     if(!pause){ 

      Gdx.graphics.setContinuousRendering(true); 
     } 

     if(lazerVec.x > cam.position.x + Gdx.graphics.getWidth()/2){ 

      lazerAtes = false; 
      lazerVec.x = cam.position.x - Gdx.graphics.getWidth(); 

     } 

     if(lazerAtes){ 

      lSound.play(); 
      lazerVec.add(Gdx.graphics.getWidth()/15, 0); 

     } 

     for(int i = 0; i < enemy.length; i++){ 

      if(lazerRect.overlaps(enemyRect[i])) 

      enemy[i].y = -200; 

     } 

     if(lazerRect.overlaps(bossRect)){ 

      bossGuc = bossGuc-5; 
      System.out.println(bossGuc); 
     } 


     if(ates){ 

      mermiVec.x+=Gdx.graphics.getWidth()/20; 

     } 

     if(mermiVec.x >= cam.position.x+Gdx.graphics.getWidth()/2+tekMermi.width){ 

      doldur = true; 
      ates = false; 
     } 

     if(doldur){ 

      mermiVec.x = ucakRect.x+ucakRect.width/8; 

     } 

     if(dus){ 

      enemy[a].y -=15; 
      enemy[a].x +=5; 

     } 

     for(int i = 0; i < enemyRect.length; i++){ 

      if(mermiRect.overlaps(enemyRect[i])){ 

        skor+=1; 
        playerGuc +=Gdx.graphics.getWidth()/800; 
        System.out.println("playerGuc :" +playerGuc); 
        enemyRect[i].width = 0; 
        enemyRect[i].height = 0; 
        enemyRect[i].y = 0; 
        doldur = true; 
        ates= false; 
        bom = true; 
        dus = true; 
        a = i; 

       } 
     } 

     if(bom){ 

      sb.begin(); 

      sb.draw(bomba.getKeyFrame(s), enemy[a].x, enemy[a].y, Gdx.graphics.getWidth()/15, Gdx.graphics.getHeight()/10); 

      sb.end(); 
      s+=Gdx.graphics.getDeltaTime(); 

      if(s > 2){ 

       bom = false; 
       s = 0; 
      } 
     } 

      cam.position.x += yercekimi.x; 

     if(Gdx.input.isTouched()){ 

      if(upRect.contains(touchPoint.x,touchPoint.y)){ 

       vec.y+=Gdx.graphics.getWidth()/160; 
       if(vec.y >= Gdx.graphics.getHeight() - ucakRect.height){ 
        vec.y = Gdx.graphics.getHeight() - ucakRect.height; 
       } 
      } 


      if(downRect.contains(touchPoint.x,touchPoint.y)){ 
       vec.y -=Gdx.graphics.getWidth()/160; 

       if(vec.y <= 0){ 
        vec.y=0; 
       } 

      } 
      if(rightRect.contains(touchPoint.x,touchPoint.y)){ 

       vec.x+=Gdx.graphics.getWidth()/220; 

       if(vec.x>cam.position.x + Gdx.graphics.getWidth()/2-ucakRect.width){ 

        vec.x = cam.position.x + Gdx.graphics.getWidth()/2-ucakRect.width; 
       } 
      } 
      if(leftRect.contains(touchPoint.x,touchPoint.y)){ 

       vec.x-=Gdx.graphics.getWidth()/220; 

       if(vec.x < cam.position.x -Gdx.graphics.getWidth()/2){ 

        vec.x = cam.position.x -Gdx.graphics.getWidth()/2; 
       } 
      } 
     } 

     cam.update(); 


     if(vec.x >= x+(Gdx.graphics.getWidth()+Gdx.graphics.getWidth()/2)){ 

      x+=Gdx.graphics.getWidth(); 

     } 

     if(mermiRect.overlaps(bossRect)){ 

      bossGuc -=playerGuc/5; 

      System.out.println("bossGuc : " +bossGuc); 
     } 

     if(ucakBom){ 

      sb.begin(); 

      sb.draw(bomba.getKeyFrame(s), ucakRect.x, ucakRect.y, Gdx.graphics.getWidth()/15, Gdx.graphics.getHeight()/10); 

      sb.end(); 

      s+=Gdx.graphics.getDeltaTime(); 
      System.out.println(s); 

      if(s > 2){ 

       ucakBom = false; 
       s = 0; 

       } 
      } 

     if(playerDus){ 

      vec.y-=5; 

      if(vec.y<0){ 
       play.stop(); 
       playerSound.stop(); 
       bossSound.stop(); 
       faf.setScreen(new GameOver(faf)); 
      } 
     } 


     for(int j = 0; j < altkayalar.length; j++){ 

      if(ucakRect.overlaps(altRect[j]) || ucakRect.overlaps(enemyRect[j]) || ucakRect.overlaps(ustRect[j])){ 

       play.stop(); 
       playerSound.stop(); 
       bossSound.stop(); 
       faf.setScreen(new GameOver(faf)); 

      } 
     } 

     if(ucakRect.overlaps(bossRect) || ucakRect.overlaps(bossMermiRect) || ucakRect.overlaps(tavanRect) || ucakRect.overlaps(tabanRect)){ 

     ucakBom = true; 
     playerDus = true; 

    } 

     if(boss.x - vec.x < Gdx.graphics.getWidth()-199){ 

      yercekimi.set(0,0); 
      savas = true; 
     } 

     if(savas){ 
     Savas(); 
     } 

     if(bossGuc < 0){ 

      play.stop(); 
      playerSound.stop(); 
      bossSound.stop(); 
      faf.setScreen(new Clear1(faf)); 

     } 
     ani+=delta; 

     sr.setProjectionMatrix(cam.combined); 

     sr.begin(ShapeType.Filled); 
     sr.setColor(Color.BLUE); 
     sr.rect(cam.position.x - Gdx.graphics.getWidth()/2 + Gdx.graphics.getWidth()/12, Gdx.graphics.getHeight()- Gdx.graphics.getHeight()/17 , playerGuc, Gdx.graphics.getHeight()/22); 
     sr.setColor(Color.RED); 
     sr.rect(cam.position.x - Gdx.graphics.getWidth()/2 + Gdx.graphics.getWidth()/12, Gdx.graphics.getHeight() - Gdx.graphics.getHeight()/8, bossGuc, Gdx.graphics.getHeight()/22); 
     sr.end(); 


    } 

    public void PauseGame(){   



    } 

    public void Savas(){ 

//  bossSound.loop(); 

     if(boss.y > Gdx.graphics.getHeight()-boss.height){ 

       up = false; 
       down = true;  
      } 

     if(boss.y < 0){ 

       down = false; 
       up = true; 
      } 

     if(boss.x < cam.position.x - Gdx.graphics.getWidth()/3){ 

      right = true; 
      left = false; 

     } 

     if(boss.x > cam.position.x + Gdx.graphics.getWidth()/2 - boss.width){ 

      left = true; 
      right = false; 

     } 

     if(down){ 

      boss.Down(); 
     } 

     if(up){ 

      boss.Up(); 

     } 

     if(right){ 

      boss.Right(); 
     } 

     if(left){ 

      boss.Left(); 
     } 

     if(bossRect.y %93 == 0){ 

      bossAtes = true; 

     } 

     if(bossAtes){ 

      bossMermiVec.x-=20; 
     } 

     if(!bossAtes){ 

      bossMermiVec.x = bossRect.x; 
     } 

     if(bossMermiVec.x < cam.position.x -Gdx.graphics.getWidth() -100){ 

      bossAtes = false; 
      } 

     } 
    @Override 
    public void resize(int width, int height) { 
     // TODO Auto-generated method stub 


    } 

    @Override 
    public void pause() { 
     // TODO Auto-generated method stub 

    } 

    public void resume() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void hide() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void dispose() { 
     // TODO Auto-generated method stub 

    } 

} 

ответ

0

Как и у вас есть PlayScreen, вы также можете просто сделать PauseScreen. Просто передайте всю информацию, которую вы хотите сохранить, в PauseScreen (позиция игрока, оценка и т. Д.). Когда вы вернетесь на PlayScreen, просто верните все исходные данные.

Другой способ сделать это будет, остановив все методы обновления, такие как render() и просто сохранив тот же самый экземпляр PlayScreen, чтобы вы могли его повторно использовать.

-1

Простым способом справиться с этим является создание класса GameStateManager, который обрабатывает все ваши разные состояния, и позволит вам переключиться с PlayState (Screen) на PauseState.

GameState Design Info: http://blog.nuclex-games.com/tutorials/cxx/game-state-management/

0

Я все еще относительно новый (один год в кодировании в целом), но я использую следующие для игры я в настоящее время развивается ... Изменить код для ваших потребностей и оптимизации это вам нравится. Я отрезал много кода, чтобы было легче понять.

public enum GAMESTATE{ 
    RUNNING, PAUSED, FAILED, PASSED; 
} 




    @Override 
public void show() { 
    camera = new OrthographicCamera(); 
    camera.position.set(WORLD_WIDTH/2, WORLD_HEIGHT/2, 0); 
    camera.update(); 
    viewport = new StretchViewport(WORLD_WIDTH, WORLD_HEIGHT, camera); 

    // REST OF CODE 

    gamestate = GAMESTATE.RUNNING; 

    // REST OF CODE 
} 

@Override 
public void render(float delta) { 
    switch (gamestate){ 

     case RUNNING: 
      update(delta); 
      renderRunning(delta); 
      break; 

     case PAUSED: 
      renderPaused(delta); 
      break; 

     case FAILED: 
      levelFailed(); 
      break; 

     case PASSED: 
      levelPassed(); 
      break; 
    } 
} 




@Override 
public void pause() { 
    gamestate = GAMESTATE.PAUSED; 
} 

@Override 
public void resume() { 
    gamestate = GAMESTATE.PAUSED; 
} 

@Override 
public void hide() { 
    gamestate = GAMESTATE.PAUSED; 
} 




private class PauseButton extends Actor { 

    private Texture pause; 

    private PauseButton(){ 
     pause = new Texture("button/pause.png"); 

     setWidth(150); 
     setHeight(150); 
     setBounds(1200, 2100, getWidth(), getHeight()); 
     setTouchable(Touchable.enabled); 
     Gdx.input.setInputProcessor(buttonStage); 
     addListener(new InputListener() { 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       gamestate = GAMESTATE.PAUSED; 
       return true; 
      } 

      public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      } 
     }); 
    } 


    @Override 
    public void draw(Batch batch, float alpha){ 
     batch.setProjectionMatrix(GameScreen.camera.combined); 
     batch.draw(pause, 1200, 2100); 
    } 

    @Override 
     public void act(float delta){ 
      Gdx.input.setInputProcessor(buttonStage); 
    } 
} 






private class ResumeButton extends Actor { 

    private Texture resume; 

    private ResumeButton(){ 
     resume = new Texture("button/resume.png"); 

     setWidth(150); 
     setHeight(150); 
     setBounds(1200, 2100, getWidth(), getHeight()); 
     setTouchable(Touchable.enabled); 
     Gdx.input.setInputProcessor(resumeButtonStage); 
     addListener(new InputListener() { 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       gamestate = GAMESTATE.RUNNING; 
       PauseMenuActor.timer = 0; 
       return true; 
      } 

      public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      } 
     }); 
    } 


    @Override 
    public void draw(Batch batch, float alpha){ 
     batch.setProjectionMatrix(GameScreen.camera.combined); 
     if (gamestate == GAMESTATE.PAUSED) { 
      batch.draw(resume, 1200, 2100); 
     } 
    } 

    @Override 
    public void act(float delta){ 
     Gdx.input.setInputProcessor(resumeButtonStage); 
    } 
} 

Stage(libgdx API) Используйте для добавления актеров кнопку

Stage stage, resumeButtonStage; 

private void defineButtonStage(){ 
    // Pause Button Stage 
    buttonStage = new Stage(new ScreenViewport()); 
    buttonStage.setViewport(viewport); 

    PauseButtonSprite pauseButtonSprite = new PauseButtonSprite(); 
    buttonStage.addActor(pauseButtonSprite); 


    // Resume Button Stage. 
    resumeButtonStage = new Stage(new ScreenViewport()); 
    resumeButtonStage.setViewport(viewport); 

    ResumeButtonSprite resumeButtonSprite = new ResumeButtonSprite(); 
    resumeButtonStage.addActor(resumeButtonSprite); 

} 
Смежные вопросы