是否可以在Libgdx中的android模块中的活动或类中打开核心模块上的屏幕?

时间:2017-06-07 10:36:45

标签: java android libgdx

我正在开发一款使用谷歌地图的游戏。我已经让我的游戏检查互联网连接的可用性。 因此,当没有互联网连接时,游戏的离线模式非常好,但是当有互联网连接时, 游戏在谷歌地图的帮助下显示特定的地方。我在需要在地图上显示的地方保留了标记。我想 当我点击地图上的标记时打开游戏屏幕。谷歌地图的代码在Android模块中,屏幕在核心模块中。 任何人都可以帮我解决当我使用谷歌地图提供的方法点击标记时如何打开屏幕,如下所示:

public boolean onMarkerClick(Marker marker) {
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {};
        return false;
    }
}

我已经研究过它,但我无法找到合适的参考。那么可以这样做还是不行?

1 个答案:

答案 0 :(得分:0)

是的,可以从Screen模块更改android

core模块注入所有平台特定模块,因此您可以访问任何模块中的所有类/接口。

只需要引用Game类对象和新屏幕的对象,所以请在Game类中继续引用AndroidLauncher的子对象。

MyGdxGame gdxGame;

@Override
protected void onCreate (Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
     gdxGame = new MyGdxGame();
     View gameView = initializeForView(gdxGame, config);

     setContentView(gameView);
} 

现在您引用了MyGdxGame,您可以通过调用AndroidLauncher类的setScreen(Screen screen)方法来更改Game类中的屏幕。

 gdxGame.setScreen(new MenuScreen());

MyGdxGameMenuScreen位于core模块

MyGdxGame上课

public class MyGdxGame extends Game {

    @Override
    public void create() {
        setScreen(new MainScreen());
    }
}

MenuScreen上课

public class MenuScreen extends ScreenAdapter {


}

修改

@Override
public boolean onMarkerClick(Marker marker) {
       Gdx.app.postRunnable(new Runnable() {
            @Override
            public void run() {
                 gdxGame.setScreen(new MenuScreen());
            }
        });
     return false;
}

编辑2

您的问题是否可以从Android模块更改屏幕, 我并不专注于游戏的另一部分,所以尽可能简化,所以我只测试了四个类。

  1. GdxTest

    public class GdxTest extends Game{
    
       @Override
       public void create() {
           setScreen(new FirstScreen());
       }
    }
    
  2. FirstScreen

    public class FirstScreen extends ScreenAdapter {
    
      @Override
      public void render(float delta) {
    
          Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
          Gdx.gl.glClearColor(0,0,1,1);
      }
    }
    
  3. SecondScreen

    public class SecondScreen extends ScreenAdapter {
    
       SpriteBatch batch;
    
      @Override
      public void show() {
          batch=new SpriteBatch();
      }
    
      @Override
      public void render(float delta) {
    
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        Gdx.gl.glClearColor(1,0,0,1);
      }
    }
    
  4. android模块中的
  5. AndroidLauncher

    public class AndroidLauncher extends AndroidApplication {
    
       GdxTest gdxTest;
       boolean swap;
    
      @Override
      protected void onCreate (Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
    
           gdxTest =new GdxTest();
           initialize(gdxTest);
      }
    
      @Override
      public void onBackPressed() {
          Gdx.app.postRunnable(new Runnable() {
              @Override
              public void run() {
                  swap=!swap;
                  gdxTest.setScreen(swap?new SecondScreen():new FirstScreen());
            }
        });
      }
    }
    
  6. 每次当我按下Android设备时,屏幕从一个屏幕变为另一个(这从android模块更改),确定,这可以从android模块更改屏幕。