Java 如何访问anywhere LibGDX的ApplicationAdapter实例

Java 如何访问anywhere LibGDX的ApplicationAdapter实例,java,android,libgdx,Java,Android,Libgdx,我在应用程序适配器中播放音乐。我想暂停并播放音乐形式PlayState。如何从任何位置访问ApplicationAdapter的实例。我尝试使用GreenBot EventBus,但它只适用于android。有什么帮助吗? 提前谢谢 教室里正在播放音乐 package com.brentaureli.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic

我在
应用程序适配器中播放音乐。我想暂停并播放音乐形式
PlayState
。如何从任何位置访问
ApplicationAdapter
的实例。我尝试使用GreenBot EventBus,但它只适用于android。有什么帮助吗? 提前谢谢

教室里正在播放音乐

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);
    }
}
package com.brentaureli.game.states;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.graphics.Texture;
导入com.badlogic.gdx.graphics.g2d.SpriteBatch;
导入com.badlogic.gdx.math.Vector2;
导入com.badlogic.gdx.utils.Array;
导入com.brentaureli.game.FlappyDemo;
导入com.brentaureli.game.sprites.Bird;
导入com.brentaureli.game.sprites.Tube;
公共类PlayState扩展了状态{
专用静态最终内管间距=125;
专用静态最终整数管计数=4;
专用静态最终int接地偏移量=-50;
私人雀鸟;
私人纹理背景;
私人纹理地面;
专用矢量2 groundPos1,groundPos2;
专用阵列管;
公共播放状态(GameStateManager gsm){
超级(gsm);
鸟=新鸟(50300);
凸轮设置为(假,FlappyDemo.WIDTH/2,FlappyDemo.HEIGHT/2);
bg=新纹理(“bg.png”);
地面=新纹理(“ground.png”);
groundPos1=新矢量2(cam.position.x-cam.viewportWidth/2,GROUND\u Y\u偏移);
groundPos2=新矢量2((cam.position.x-cam.viewportWidth/2)+ground.getWidth(),ground\u Y\u偏移);
管=新阵列();
对于(int i=1;i tube.getPosTopTube().x+tube.getOpTube().getWidth()){
重新定位(tube.getPosTopTube().x+((tube.tube_宽度+tube_间距)*tube_计数));
}
if(tube.collides(bird.getBounds()))
gsm.set(新菜单(gsm));
}
if(bird.getPosition().y groundPos1.x+ground.getWidth())
groundPos1.add(ground.getWidth()*2,0);
如果(cam.position.x-(cam.viewportWidth/2)>groundPos2.x+ground.getWidth())
groundPos2.add(ground.getWidth()*2,0);
}
}

完整代码:

通过此命令获取游戏中任何位置的ApplicationListener实例

ApplicationListener applicationListener = Gdx.app.getApplicationListener();
将其向下转换到
FlappyDemo
,然后可以使用
FlappyDemo
类的数据成员

FlappyDemo flappyDemo =(FlappyDemo) applicationListener;
flappyDemo.music.play();
在一行中使用


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

在FlappyDemo类中创建一个FlappyDemo类型的静态变量,以引用自身并在创建时初始化它,然后您可以在整个应用程序中访问它。谢谢您的回答,不管我使用了什么
https://github.com/libgdx/gdx-ai/wiki/Message-Handling
以获得相同的结果。。