我正在开发一款使用谷歌地图的游戏。我已经让我的游戏检查互联网连接的可用性。 因此,当没有互联网连接时,游戏的离线模式非常好,但是当有互联网连接时, 游戏在谷歌地图的帮助下显示特定的地方。我在需要在地图上显示的地方保留了标记。我想 当我点击地图上的标记时打开游戏屏幕。谷歌地图的代码在Android模块中,屏幕在核心模块中。 任何人都可以帮我解决当我使用谷歌地图提供的方法点击标记时如何打开屏幕,如下所示:
public boolean onMarkerClick(Marker marker) {
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {};
return false;
}
}
我已经研究过它,但我无法找到合适的参考。那么可以这样做还是不行?
答案 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());
MyGdxGame
和MenuScreen
位于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模块更改屏幕, 我并不专注于游戏的另一部分,所以尽可能简化,所以我只测试了四个类。
GdxTest
public class GdxTest extends Game{
@Override
public void create() {
setScreen(new FirstScreen());
}
}
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);
}
}
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);
}
}
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());
}
});
}
}
每次当我按下Android设备时,屏幕从一个屏幕变为另一个(这从android模块更改),确定,这可以从android模块更改屏幕。