AndEngine - возникли проблемы с подключением нового объекта Sprite - PullRequest
0 голосов
/ 02 декабря 2011

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

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 ]

1 голос
/ 03 декабря 2011

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

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

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

// Move this
this.SpriteDayPortrait = new Sprite(-200, 0, 2000, 500, this.mParallaxLayerDayPortrait);
        this.SpriteDayLandscape = new Sprite(0, 0, 750, 500, this.mParallaxLayerDayLandscape);
0 голосов
/ 02 декабря 2011

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

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

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

...