Управление кнопкой «Назад» с несколькими сценами - PullRequest
3 голосов
/ 11 октября 2011

Я следовал этому уроку http://www.andengine.org/forums/tutorials/multiple-screen-andengine-game-v2-t4755.html, чтобы создать простое приложение с несколькими сценами и только одним действием.Я хотел бы знать, как я могу вернуться к предыдущей сцене, когда я использую кнопку «Назад», и закончить упражнение, когда я нахожусь в первой сцене.

Я пробовал это в классе MultiScreen:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        this.mEngine.getScene().back();
    }
    return super.onKeyDown(keyCode, event);
}

замена core.getEngine().setScene(scene); в SceneManager на this.mEngine.getScene().setChildScene(scene);


работает иначе, чем я понял, я разрешаю с помощью:

    @Override
    public void onBackPressed()
    {
        Scene scene = this.mEngine.getScene();
        if(scene.hasChildScene()){
            scene.back();
        }
        else{
            this.finish();
        }
    }

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Вы можете переопределить клавишу возврата одним из двух способов, либо переопределив метод onBackPressed (), либо метод dispatchKeyEvent ()

Переопределив onBackPressed:

@Override
public void onBackPressed()
{
    // your code here
}

Переопределив dispatchKeyEvent:

@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        // your code here
    }
    return (yourbooleanhere);
}
0 голосов
/ 09 апреля 2012

У меня была такая же дилемма, как и у вас. Я объясняю. У меня есть активность, как работает с ViewFlipper. Мне нужно перейти к другому «макету», который я написал для тега ViewFlipper, и, когда я был в определенном «макете», который не является основным «макетом» действия, мне нужно вернуться к главному, нажав кнопка «назад», но она не работает так, как я хочу.

Чтобы разрешить эту дилемму, я переопределяю функцию OnBackPressed, например:

@Override
public void onBackPressed() {
    if (condition) {
        // go to the main 
    } else {
        super.onBackPressed();
}
}

где condition, как следует из названия, откуда вы знаете, что находитесь в основной «раскладке»? Например, в моем ViewFlipper основной «макет» упорядочен по номерам, которые начинаются с 0, поэтому мой основной «макет» равен 0, и как я знаю, что я нахожусь в 0 «макете», viewflipper.getDisplayedChild(). Если он возвращает 0, я остаюсь в основном «макете» или нет, в противном случае.

Так просто, но, я знаю, не так элегантно. Думаю, это может помочь вам.

...