2017-02-25 7 views
1

私は音楽をApplicationAdapterで再生しています。私は一時停止して、音楽形式PlayStateを演奏したいと思います。 ApplicationAdapterのインスタンスにはどこからでもアクセスできます。私はGreenBot EventBusを使ってみましたが、アンドロイドでのみ動作します。どんな助け? ありがとうございます。ApplicationAdapterインスタンスにアクセスする方法LibGDX

音楽は以下のクラスで再生されています。私はクラスの下にフォームを一時停止し、再生したい

package com.brentaureli.game; 

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.audio.Music; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.brentaureli.game.states.GameStateManager; 
import com.brentaureli.game.states.MenuState; 

    public class FlappyDemo extends ApplicationAdapter { 
     public static final int WIDTH = 480; 
     public static final int HEIGHT = 800; 

     public static final String TITLE = "Flappy Bird"; 
     private GameStateManager gsm; 
     private SpriteBatch batch; 

     private Music music; 


     @Override 
     public void create() { 
      batch = new SpriteBatch(); 
      gsm = new GameStateManager(); 
      music = Gdx.audio.newMusic(Gdx.files.internal("music.mp3")); 
      music.setLooping(true); 
      music.setVolume(0.1f); 
      music.play(); 
      Gdx.gl.glClearColor(1, 0, 0, 1); 
      gsm.push(new MenuState(gsm)); 
     } 

     @Override 
     public void render() { 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
      gsm.update(Gdx.graphics.getDeltaTime()); 
      gsm.render(batch); 
     } 

     @Override 
     public void dispose() { 
      super.dispose(); 
      music.dispose(); 
     } 

    } 

package com.brentaureli.game.states; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.math.Vector2; 
import com.badlogic.gdx.utils.Array; 
import com.brentaureli.game.FlappyDemo; 
import com.brentaureli.game.sprites.Bird; 
import com.brentaureli.game.sprites.Tube; 


public class PlayState extends State { 
    private static final int TUBE_SPACING = 125; 
    private static final int TUBE_COUNT = 4; 
    private static final int GROUND_Y_OFFSET = -50; 

    private Bird bird; 
    private Texture bg; 
    private Texture ground; 
    private Vector2 groundPos1, groundPos2; 

    private Array<Tube> tubes; 

    public PlayState(GameStateManager gsm) { 
     super(gsm); 
     bird = new Bird(50, 300); 
     cam.setToOrtho(false, FlappyDemo.WIDTH/2, FlappyDemo.HEIGHT/2); 
     bg = new Texture("bg.png"); 
     ground = new Texture("ground.png"); 
     groundPos1 = new Vector2(cam.position.x - cam.viewportWidth/2, GROUND_Y_OFFSET); 
     groundPos2 = new Vector2((cam.position.x - cam.viewportWidth/2) + ground.getWidth(), GROUND_Y_OFFSET); 

     tubes = new Array<Tube>(); 

     for(int i = 1; i <= TUBE_COUNT; i++){ 
      tubes.add(new Tube(i * (TUBE_SPACING + Tube.TUBE_WIDTH))); 
     } 


    } 

    @Override 
    protected void handleInput() { 
     if(Gdx.input.justTouched()) 
      bird.jump(); 
    } 

    @Override 
    public void update(float dt) { 
     handleInput(); 
     updateGround(); 
     bird.update(dt); 
     cam.position.x = bird.getPosition().x + 80; 

     for(int i = 0; i < tubes.size; i++){ 
      Tube tube = tubes.get(i); 

      if(cam.position.x - (cam.viewportWidth/2) > tube.getPosTopTube().x + tube.getTopTube().getWidth()){ 
       tube.reposition(tube.getPosTopTube().x + ((Tube.TUBE_WIDTH + TUBE_SPACING) * TUBE_COUNT)); 
      } 

      if(tube.collides(bird.getBounds())) 
       gsm.set(new MenuState(gsm)); 
     } 

     if(bird.getPosition().y <= ground.getHeight() + GROUND_Y_OFFSET) 
      gsm.set(new MenuState(gsm)); 
     cam.update(); 

    } 

    @Override 
    public void render(SpriteBatch sb) { 
     sb.setProjectionMatrix(cam.combined); 
     sb.begin(); 
     sb.draw(bg, cam.position.x - (cam.viewportWidth/2), 0); 
     sb.draw(bird.getTexture(), bird.getPosition().x, bird.getPosition().y); 
     for(Tube tube : tubes) { 
      sb.draw(tube.getTopTube(), tube.getPosTopTube().x, tube.getPosTopTube().y); 
      sb.draw(tube.getBottomTube(), tube.getPosBotTube().x, tube.getPosBotTube().y); 
     } 

     sb.draw(ground, groundPos1.x, groundPos1.y); 
     sb.draw(ground, groundPos2.x, groundPos2.y); 
     sb.end(); 
    } 

    @Override 
    public void dispose() { 
     bg.dispose(); 
     bird.dispose(); 
     ground.dispose(); 
     for(Tube tube : tubes) 
      tube.dispose(); 

     System.out.println("Play State Disposed"); 
    } 

    private void updateGround(){ 
     if(cam.position.x - (cam.viewportWidth/2) > groundPos1.x + ground.getWidth()) 
      groundPos1.add(ground.getWidth() * 2, 0); 
     if(cam.position.x - (cam.viewportWidth/2) > groundPos2.x + ground.getWidth()) 
      groundPos2.add(ground.getWidth() * 2, 0); 
    } 
} 

全コード:どこでもあなたのゲームでhttps://github.com/BrentAureli/FlappyDemo

+0

自体を参照して、それをOnCreateの初期化で参照するためにFlappyDemoクラスのタイプFlappyDemoの静的変数を作成し、その後、あなたはアプリケーション全体にアクセスすることができます。 –

答えて

2

取得ApplicationListenerインスタンスこれによって。

ApplicationListener applicationListener = Gdx.app.getApplicationListener(); 
FlappyDemoにダウンキャスト

それは、その後、あなたはあなたのFlappyDemoクラスのデータメンバを使用することができます。

FlappyDemo flappyDemo =(FlappyDemo) applicationListener; 
flappyDemo.music.play(); 

単一ラインで使用

((FlappyDemo)Gdx.app.getApplicationListener()).music;

+1

とにかく私は 'https:// github.com/libgdx/gdx-ai/wiki/Message-Handling'を使っていただきありがとうございます。 –

関連する問題