我有三个实现LibGdx Screen类的类:
MainMenuScreen,LevelSelectScreen,GameScreen
现在我将MainMenuScreen的setCatchBackKey设置为false,因此游戏将在退出时退出 .
LevelSelectScreen和GameScreen将setCatchBackKey设置为true .
在GameScreen的渲染功能中,我有:
@Override
public void render(float delta)
{
gameTime = delta;
if (Gdx.input.isKeyPressed(Keys.BACK))
new LevelSelectScreen(game);
...
}
它将屏幕设置为显示级别选择,并且在LevelSelectScreens的渲染功能中我有:
@Override
public void render(float delta)
{
if (Gdx.input.isKeyPressed(Keys.BACK))
new MainMenuScreen(game);
Update();
Draw();
} //end render
我遇到的问题是,当我按回GameScreen时,LevelSelectScreen闪烁到屏幕一会儿,然后直接回到MainMenuScreen .
我想我可以设置一些变量来检查在屏幕初始化时是否已经按下了Back,但是如果LibGdx中已经包含一些“魔法”函数或只是代码结构也可以解决这个问题,这只是好奇 .
4 回答
首先扩展Stage类,如下所示:
然后在你的
Screen
课程中:希望它可以帮助您或正在寻找这些东西的其他人 .
您可以实现InputProcessor接口,而不是使用Gdx.input.isKeyPressed(int) .
InputProcessor的文档:http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/InputProcessor.html
不要忘记注册您的InputProcessor以接收输入事件,使用:Gdx.input.setInputProcessor(InputProcessor);
对于这种特殊情况,请使用keyDown .
我使用一个Activity类,为我拥有的每个屏幕扩展“AndroidApplication”类,例如LevelSelectActivity,MainMenuActivity和GameActivity . 在每个类中都有一个“Screen”扩展类对象,就像你拥有的类一样,并且控制事件如暂停,恢复和后退按键是Activity类的职责,而不是屏幕类 . 当需要返回时,只需调用例如GameActivity类中的“finish()”方法 . 它会自动转到SelectLevelActivity .
我所做的是存储最后一次按下后退键的时间,如果它刚刚出现,则不会对它做出反应 .