es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los nodos de SpriteKit tienen un comportamiento diferente en cuanto a su posición en diferentes dispositivos.

Estoy trabajando en un juego que involucra hacer pizzas, quiero dibujar un nodo de pizza en la parte inferior de la pantalla, pero tengo problemas para hacer que se alinee consistentemente en cada dispositivo.

Aquí está mi código creando el nodo de pizza:

override init() {
    super.init()

    let image = SKSpriteNode(imageNamed: "plain_pizza")

    image.setScale(0.5)

    self.image = image

    self.position = CGPoint(x: 0, y: (-UIScreen.main.bounds.height))

    self.addChild(image)
}

Y a continuación hay una imagen que muestra cómo se muestra en un iPhone 11 vs un iPod touch v7.

En el iPod touch, de alguna manera establecer la posición y en -height lo coloca en el lugar perfecto, pero en el iPhone 11 está fuera de la pantalla. En el iPhone 11 se mostrará en el lugar correcto si hago esto en su lugar:

self.position = CGPoint(x: 0, y: (-UIScreen.main.bounds.height + (image.size.height*1.5)))

Entonces, ¿por qué la posición y es diferente en ambos dispositivos? Yo habría pensado que debería funcionar como en el iPhone 11 en ambos. ¿Cómo puedo hacer que aparezca siempre en la parte inferior de la pantalla?

Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La diferencia en la posición y en diferentes dispositivos probablemente se deba a que sus tamaños de pantalla tienen alturas diferentes. El iPod touch v7 tiene un tamaño de pantalla más pequeño en comparación con el iPhone 11, y por lo tanto el nodo de pizza aparece en el lugar correcto con la posición y establecida en -height.

    Para asegurarse de que el nodo de pizza siempre aparezca en la parte inferior de la pantalla independientemente del dispositivo, puedes calcular la posición y de forma dinámica en función del tamaño de la pantalla y el tamaño del nodo de pizza.

    Una forma de hacerlo es calcular la posición de la siguiente manera:

    let pizzaHeight = image.size.height * 0.5
    let screenHeight = UIScreen.main.bounds.height
    self.position = CGPoint(x: 0, y: -(screenHeight / 2 + pizzaHeight))
    

    Esto calcula la posición y del centro de la pantalla y la desplaza en la mitad de la altura del nodo de pizza.

    Alternativamente, también puedes utilizar la propiedad anchorPoint del nodo para posicionarlo en relación con la parte inferior de la pantalla. Por ejemplo:

    image.anchorPoint = CGPoint(x: 0.5, y: 0)
    self.position = CGPoint(x: UIScreen.main.bounds.width / 2, y: 0)
    

    Esto establece el punto de anclaje en la parte inferior centrada del nodo de pizza y lo posiciona en el centro del borde inferior de la pantalla.

Comments are closed.