У меня есть несколько игровых объектов в моей игре iOS, некоторые из которых имеют большее разрешение, чем другие. Графика, используемая для игрового объекта, выбирается случайным образом во время выполнения. Я хотел бы, чтобы убедиться, что все они не идут в течение определенного размера при использовании, поэтому я разработал следующий алгоритм:Калибровка и масштабирование SKSpriteNode
while self.spriteNode.rSize.width > 100 && self.spriteNode.rSize.height > 100 {
self.xScale -= 0.01
self.yScale -= 0.01
}
где spriteNode является объектом, текстура является графическим и rSize является расширенным вычисленное свойство на SKSpriteNode, которое возвращает размер накопленного кадра узла.
Часто это приводит к бесконечному циклу. В чем проблема?
UPDATE 1
Основываясь на комментарий LearnCocos2D, я попытался следующие:
let reqXScale = 50/self.spriteNode.rSize.width
let reqYScale = 50/self.spriteNode.rSize.height
self.xScale = reqXScale
self.yScale = reqYScale
Хотя это решает проблему бесконечного цикла, некоторые объекты сплющенные, а не держать их исходное соотношение сторон.
Кроме того, вот код, который определяет rSize:
var rSize: CGSize {
return self.calculateAccumulatedFrame().size
}
Я использовал это надежно несколько раз.
Было бы полезно, если бы вы разместили код, определяющий rSize. – 0x141E
Вау, это ужасный код, вы можете просто получить требуемый масштабный коэффициент из соотношения между фактическим и желаемым размером и назначить результат. Цикл while будет блокировать программу некоторое время (или если у вас есть ошибка, как в этом случае: навсегда). Также рассмотрите соотношение сторон, вы можете обновить масштаб x/y отдельно. – LearnCocos2D
Почему накопленный фрейм? Если узлы не имеют дочерних элементов, то они идентичны фрейму. Если у него есть дети, он не будет масштабировать контент спрайта до нового размера, а также общий размер спрайта и его детей. – LearnCocos2D