Pergunta

Eu venho fazendo tentativa e erro por horas agora e eu ainda não vieram acima com uma solução para algo que parece simples .... Eu estou usando o

public void onConfigurationChanged(Configuration newConfig)

método para detectar se um usuário mudou sua orientação da tela. Eventualmente, ele é enviado a este método onde os entitys estão ligados à cena:

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);

                }
            }

}

Este método é chamado para quando o papel de parede é criada pela primeira vez, e também quando um usuário muda a orientação da tela.

Eu testei isso no meu telefone e ele exibe com êxito as mensagens de log quando eu mudar orientações, o que significa que ele está fazendo isso o que eu quero que ele faça.

O Problema -

A criança Sprite não separar quando este método é chamado para. Se eu estiver no modo retrato, e mudar para paisagem, os restos do sprite retrato e eu gostaria que ele desapareça, e vice-versa.

Eu ficaria muito feliz se alguém poderia responder a esta Eu tenho tido uma dor de cabeça sobre isso por provavelmente 20 horas.

Foi útil?

Solução

Parece que o problema pode ser lógica:. Você transferir o SpriteDayPortrait e SpriteDayLanscape antes de chamar o ramo sobre destacando-los ou anexá-los

Assim, cada vez que o script detach é chamado ele está se referindo a um new instância do sprite, em vez do antigo instância que você deseja desanexar.

tente mover a atribuição dos sprites em outra função que só é chamado quando a cena é criado:

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

Outras dicas

Tenha em mente que desde a mudança de orientação em AndEngine não existe (Você não está autorizado a orientação motor de mudança), você should't fazer o seu jogo estar usando mudanças de orientação (Isso seria estranho para o usuário).

De qualquer forma, onConfigurationChanged é chamado a partir do segmento interface do usuário, e você não deve manipular objetos de AndEngine mas no UpdateThread. Ele pode causar alguns problemas (No entanto, se fosse, o jogo iria falhar) para alterá-lo.

Eu acho que isso acontece porque você não limpar a sua ParallaxBackground antes de definir o novo fundo (talvez o fundo velho esconde o novo?) Manter uma referência a sua última ParallaxEntity em seguida, removê-lo do fundo antes de adicionar um novo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top