Recursos de jogo 2D universais e posicionamento de nó absoluto

Eu tenho uma pergunta sobreativos de jogos universais eposicionamento absoluto de umSKNodes noSprite Kit (iOS 8 ou superior).

Vou tentar apresentar meu problema através de um exemplo da seguinte maneira:

Imagine umJogo 2D de cima para baixo com umSKSpriteNode o que representa uma casa. Uma casa tem vários filhosSKSpriteNodes que representam cadeiras, mesa, sofá, etc.

Eu tenho 3 versões do ativo da casa:

1x - 200 x 200px (IPads sem retina),2x - 400 x 400px (IPhones e iPads da Retina),3x - 600 x 600px (iPhone 6 Plus).

Importante: As posições dos nós filhos (cadeiras, mesa, etc.) são definidas emarquivo .plist. Algo assim (representação JSON):

children: [
    {
        position = {20,20};
    },
    ...
]

Como a posição é definida em pontos e não em pixels, tudo é posicionado como esperado, de acordo com a escala da tela do dispositivo. Para1x dispositivos a posição permanece{20,20}, para2x posição é{40,40} e para3x a posição é{60,60}.

Problema:

O problema é que200x200px e400x400px ativos sãomaneira pequena para dispositivos iPad para obter uma aparência semelhante em todos os dispositivos.

Pergunta, questão:

Como apresentar / importar com êxito recursos de uma maneira que me permitisse obter uma aparência semelhante (se não a mesma) em todos os tamanhos de dispositivos / tela sem interromper o posicionamento dos nós filhos?

Minhas tomadas:

Take 1:

Eu poderia simplesmente usar o existente400x400px ativos em dispositivos iPad sem retina e600x600px ativos nos dispositivos iPad da Retina para o nó interno, mas o posicionamento dos nós filhos seria quebrado. Isso ocorre porque o valor da posição filho não mudaria e ainda seria{20,20} e{40,40} para dispositivos iPad, respectivamente, enquanto os ativos seriam maiores. Isso produziria posições filho imprecisas em relação ao nó da casa.

Take 2:

Eu também poderia escalar oSKScene tamanho (efeito de zoom) enquanto usa o200x200px e400x400px ativos dimensionados para dispositivos iPad, respectivamente. Isso funciona e mantém o posicionamento dos nós filhos funcionando, mas a qualidade renderizada da cena / ativos não é boa como deveria ser. Além disso, isso parece um hack e não queremos isso.

Take 3:

Eu também poderia usar o dobro de grandes recursos para dispositivos iPad e dobrar a posição dos nós filhos no tempo de execução. Nesse caso, eu usaria um400x400px ativo para dispositivos iPad sem retina e um novo800x800px ativo para dispositivos iPad retina. Embora isso pareça ótimo e mantenha o posicionamento dos nós filhos funcionando, parece um hack muito grande que fixa a posição do nó filho durante o tempo de execução com isso:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    position.x *= 2.0f;
    position.y *= 2.0f;
}

Obrigado por reservar um tempo para ler a pergunta!

questionAnswers(4)

yourAnswerToTheQuestion