Я пробовал все, и ничего не работает для позиционирования узлов для универсальной игры SpriteKit. В настоящее время я использую .AspectFill в качестве коэффициента масштабирования, и я пытался создать излишне сложные алгоритмы для размещения узлов (например, кнопок, изображения заголовка и т. д.) для моего главного меню в моей игре в границах или подразделах сцены. Я даже пробовал позиционировать объекты относительно видимых частей сцены. например
sprite.position = CGPoint(scene.size.width/2, scene.size.height/2 + scene.size.height * 0.4)
и да, это работает для элементов игрового процесса, таких как игрок. Я понял, что этот метод ужасно непредсказуем для позиционирования элементов HUD и экрана меню в виде кнопок, которые затем имеют тенденцию перекрываться из-за динамического размера спрайтов и/или неизвестного масштабирования сцены в зависимости от устройства пользователя. (Если я правильно расположил его на iPhone, он исчезнет с экрана на iPad и наоборот), например
sprite.size = CGSize(screen.size.width * 0.6, screen.size.width * 0.6)
Затем я продолжил делать расширение SKSpriteNode, чтобы он мог изменять свой размер в зависимости от заданных границ (CGRect), и тогда я понял, насколько сложным, беспорядочным и трудоемким было позиционирование одного узла на моей сцене. У меня должно быть совершенно неправильное представление о позиционировании узлов в моей сцене, или я делаю это неправильно. Теперь вы понимаете контекст, вот мои вопросы:
- Должен ли я жестко кодировать позиции (я слышал, что это не очень хороший метод, но, поскольку SpriteKit выполняет масштабирование за вас, разве это не должно работать)?
- Или я должен создать динамическую позицию в зависимости от соотношения сторон каждого устройства, например.
if scene.size.width/scene.size.height >= 16/9 {
//Create position here for this device
} else if scene.size.width/scene.size.height >.... { etc etc
Этот метод тоже кажется ненужным, но я могу ошибаться
OR
- Является ли решение каким-то другим методом, о котором я не знаю
Я не могу быть единственным человеком с этой проблемой, и после многочасовых исследований, читая каждый ответ stackoverflow и веб-страницу, которую Google возвращает мне, на которой может быть мой ответ, я до сих пор не нашел решения, которое работает для моей проблемы. Этот вопрос задавали много раз, но очевидно, что ответы не соответствуют моему стилю обучения, и его нужно объяснить по-другому, чтобы я, наконец, понял его, и с количеством приложений в магазине приложений наверняка у кого-то есть легкий решение такой стрессовой проблемы, которая заставляет меня чувствовать себя немотивированным, чтобы сделать мое приложение, и это не должно иметь место.