J'ai des difficultés à configurer correctement mon application pour qu'elle s'affiche correctement sur tous les appareils. Je veux que mon jeu soit le meilleur pour l'iPhone et je comprends que régler ma taille de scène en utilisant GameScene(size: CGSize(width: 1334, height: 750))
et utiliser .aspectFill
signifie que sur iPad il y aura moins d'espace pour afficher les choses avec lesquelles je vais bien. Le problème est, comment puis-je positionner mes nœuds de sorte qu'ils sont relatifs à la hauteur et la largeur de chaque châssis de périphériques? J'utilise self.frame.height
, , self.frame.midX
, etc. pour positionner mes nœuds et quand je cours mon jeu, il positionne correctement les choses en considérant que je cours sur mon iPhone 6, mais sur mon iPad, tout semble explosé et les nœuds sont éteints. Je suis devenu fou en essayant de comprendre celaMise à l'échelle de Spritekit pour l'application universelle
Répondre
J'ai résolu cela dans mon jeu en utilisant scaleFactors, des chiffres qui disent à mon application combien d'agrandir chaque longueur, largeur, hauteur, etc. Ensuite, je fais juste mon jeu bien pour un téléphone, et utiliser la largeur et la hauteur de ce téléphone pour calculer avec quel facteur je dois l'agrandir pour d'autres appareils. Dans cet exemple, j'utilise le iPhone 4 comme base, mais vous pouvez utiliser n'importe quel appareil simplement changer le numbers en fonction de ce périphérique.
mode portrait:
var widthFactor = UIScreen.main.bounds.width/320.0 //I divide it by the default iPhone 4 width
var heightFactor = UIScreen.main.bounds.height/480.0
mode paysage:
var widthFactor = UIScreen.main.bounds.width/480.0 //I divide it by the default iPhone 4 landscape width
var heightFactor = UIScreen.main.bounds.height/320.0
Ensuite, lorsque vous faire un noeud, une image de pièce de monnaie par exemple, multiplier les coordonnées ou largeur/hauteur par les facteurs d'échelle:
let coin = SKSpriteNode(imageNamed: "coin")
coin.position = CGPoint(x: 25 * widthFactor, y: self.size.height - 70 * heightFactor)
Je pense que ce que vous cherchez pourrait être dans cette réponse: https://stackoverflow.com/a/34878528/6728196
Plus précisément, je pense que cette partie est ce que vous cherchez (modifié pour l'adapter à votre exemple):
if UIDevice.current.userInterfaceIdiom == .pad {
// Set things only for iPad
// Example: Adjust y positions using += or -=
buttonNode.position.y += 100
labelNode.position.y -= 100
}
Fondamentalement, cela ajoute juste ou soustraient une certaine quantité de la position iPhone si l'utilisateur utilise un iPad. Ce n'est pas trop compliqué, et vous pouvez augmenter ou diminuer les valeurs x et y de la position d'une certaine valeur du pourcentage de l'écran (self.size.width * decimalPercentage).
Un autre avantage de l'utilisation de cette façon est que vous modifiez simplement les positions de l'iPhone, de sorte qu'il commence en utilisant les valeurs par défaut que vous définissez. Alors si sur iPad, il va faire des changements.
Si cela est difficile à comprendre moi sais que je peux éclaircir l'explication
Cela semblait avoir quelques nœuds sur l'écran, mais ils ne sont toujours pas correctement positionné. Par exemple si je mets un noeud à x: 200 et y: 200, sur l'iPhone ça a l'air correct mais sur l'iPad ça ressemble maintenant à quelque chose comme x: 200 et y: 400. J'ai besoin de ça pareil sur les deux appareils – Brejuro
J'ai changé ma réponse, avez-vous multiplié le 'x' avec le' widthFactor', et le 'y' avec le' heightFactor'? – Eric
Ouais, mais mon application est le paysage, donc j'ai échangé la largeur et la hauteur, correct? – Brejuro