AndEngine - Проблемы с подключением нового объекта Sprite

Я занимаюсь методом проб и ошибок в течение нескольких часов, и я еще не нашел решение для чего-то, что кажется простым.... Я использую

public void onConfigurationChanged(Configuration newConfig)

метод, чтобы определить, изменил ли пользователь ориентацию экрана. В конце концов, он отправляется этому методу, где сущности прикрепляются к сцене:

public void BuildScene(final Scene scene){

       // Destroys current scene.
            scene.detachChildren();

        this.SpriteDayPortrait = new Sprite(-200, 0, 2000, 500, this.mParallaxLayerDayPortrait);
        this.SpriteDayLandscape = new Sprite(0, 0, 750, 500, this.mParallaxLayerDayLandscape);

    if (prefs.getString("frontImage", "1").equals("3"))
            {
                //Day
                if (orientationValue.equals("PORTRAIT"))
                {
                    Log.d("Orientation", "Portrait");
                    scene.detachChild(SpriteDayLandscape);

                    scene.attachChild(SpriteDayPortrait);

                }
                else if (orientationValue.equals("LANDSCAPE"))
                {
                    Log.d("Orientation", "Landscape");
                    scene.detachChild(SpriteDayPortrait);

                    scene.attachChild(SpriteDayLandscape);

                }
            }

}

Этот метод вызывается при первом создании обоев, а также при изменении ориентации экрана пользователем.

Я проверил это на своем телефоне, и он успешно отображает сообщения журнала при переключении ориентации, что означает, что он делает то, что я хочу.

Эта проблема--

Дочерний объект спрайта не отключается при вызове этого метода. Если я нахожусь в портретном режиме и переключаюсь в альбомный, портретный спрайт остается, и я хотел бы, чтобы он исчез, и наоборот.

Я был бы чрезвычайно счастлив, если бы кто-нибудь мог ответить на это, у меня была головная боль по этому поводу в течение приблизительно 20 часов.

2 ответа

Решение

Похоже, что проблема может быть в логике: вы переназначаете SpriteDayPortrait и SpriteDayLanscape перед тем, как вызывать ветку об их отсоединении или присоединении.

Поэтому каждый раз, когда вызывается скрипт отсоединения, он ссылается на новый экземпляр спрайта, а не на старый экземпляр, который вы хотите отсоединить.

попробуйте переместить назначение спрайтов в другую функцию, которая вызывается только при создании сцены:

// Move this
this.SpriteDayPortrait = new Sprite(-200, 0, 2000, 500, this.mParallaxLayerDayPortrait);
        this.SpriteDayLandscape = new Sprite(0, 0, 750, 500, this.mParallaxLayerDayLandscape);

Имейте в виду, что поскольку изменения ориентации в AndEngine не существует (вам не разрешено менять ориентацию движка), вам не следует заставлять вашу игру использовать изменения ориентации (это было бы странно для пользователя).

В любом случае, onConfigurationChanged вызывается из потока пользовательского интерфейса, и вы должны манипулировать не объектами AndEngine, а в UpdateThread. Это может вызвать некоторые проблемы (однако, если это произойдет, ваша игра потерпит крах), так что измените ее.

Я думаю, что это происходит потому, что вы не очистили свой ParallaxBackground перед установкой нового фона (возможно, старый фон скрывает новый?) Сохраните ссылку на свой последний ParallaxEntity затем удалите его из фона перед добавлением нового.

Другие вопросы по тегам