Activos de juego 2D universales y posicionamiento absoluto de nodos

Tengo una pregunta sobreactivos del juego universal yposicionamiento absoluto de unSKNodes enSprite Kit (iOS 8+).

Trataré de presentar mi problema a través de un ejemplo de la siguiente manera:

Imagina unJuego 2D de arriba hacia abajo con unSKSpriteNode que representa una casa Una casa tiene varios hijos.SKSpriteNodes que representan sillas, escritorio, sofá, etc.

Tengo 3 versiones de activos de la casa:

1x - 200 x 200px (IPads sin retina),2x - 400 x 400px (Retina iPhones y iPads),3x - 600 x 600px (iPhone 6 Plus).

Importante: Las posiciones de los nodos secundarios (sillas, escritorio, etc.) se definen en unaarchivo .plist. Algo como esto (representación JSON):

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

Dado que la posición se define en puntos y no en píxeles, todo se posiciona como se espera según la escala de la pantalla del dispositivo. por1x dispositivos la posición se mantiene{20,20}, para2x posición es{40,40} y para3x la posición es{60,60}.

Problema:

El problema es ese200x200px y400x400px los activos soncamino a pequeño para dispositivos iPad para lograr un aspecto similar en todos los dispositivos.

Pregunta:

¿Cómo presentar / importar activos con éxito de una manera que me permita lograr una apariencia similar (si no la misma) en todos los dispositivos / tamaños de pantalla sin romper el posicionamiento de los nodos secundarios?

Mis tomas:

Toma 1:

Simplemente podría usar el existente400x400px activos en dispositivos iPad no retina y600x600px activos en dispositivos Retina iPad para el nodo de la casa, pero el posicionamiento de los nodos secundarios se rompería. Esto se debe a que el valor de la posición secundaria no cambiaría y seguiría siendo{20,20} y{40,40} para dispositivos iPad respectivamente, mientras que los activos serían más grandes. Esto generaría posiciones secundarias inexactas en relación con el nodo de la casa.

Tomar 2:

También podría escalar elSKScene tamaño (efecto de zoom) mientras se usa el normal200x200px y400x400px activos de tamaño para dispositivos iPad respectivamente. Esto funciona y mantiene el posicionamiento de los nodos secundarios funcionando, pero la calidad renderizada de la escena / activos no es buena como debería ser. Además, esto se siente como un truco y no queremos eso.

Toma 3:

También podría usar el doble de activos para dispositivos iPad y duplicar la posición de los nodos secundarios en el tiempo de ejecución. En este caso usaría un400x400px activo para dispositivos iPad no retina y un nuevo800x800px activo para dispositivos iPad retina. Si bien esto se ve muy bien y mantiene el posicionamiento de los nodos secundarios funcionando, parece un gran truco arreglar la posición del nodo secundario durante el tiempo de ejecución con esto:

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

¡Gracias por tomarse el tiempo de leer la pregunta!

Respuestas a la pregunta(4)

Su respuesta a la pregunta