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
以获得相同的结果。。