Mam wiele obiektów gier w mojej grze na iOS, z których niektóre mają większą rozdzielczość niż inne. Grafika używana w grze jest wybierana losowo w środowisku wykonawczym. Chciałbym, aby upewnić się, że wszystkie one nie idą na pewną wielkość, kiedy używany, więc wymyślił następujący algorytm:Rozmiar i skalowanie SKSpriteNode
while self.spriteNode.rSize.width > 100 && self.spriteNode.rSize.height > 100 {
self.xScale -= 0.01
self.yScale -= 0.01
}
gdzie spriteNode jest obiekt, którego struktura jest graficzny i rsize jest rozszerzoną obliczona właściwość w SKSpriteNode, która zwraca rozmiar zgromadzonej ramki węzła.
Często powoduje to nieskończoną pętlę. Jaki jest problem?
UPDATE 1
podstawie komentarzu LearnCocos2D za próbowałem następujące:
let reqXScale = 50/self.spriteNode.rSize.width
let reqYScale = 50/self.spriteNode.rSize.height
self.xScale = reqXScale
self.yScale = reqYScale
Choć to rozwiązuje nieskończoną problem pętli, niektóre obiekty są spłaszczony niż utrzymanie ich oryginalnych proporcji.
Również tutaj jest kod, który określa rsize:
var rSize: CGSize {
return self.calculateAccumulatedFrame().size
}
przed Użyłem tego niezawodnie wiele razy.
Byłoby pomocne, gdyby opublikowano kod definiujący rSize. – 0x141E
wow, to jest straszny kod, można po prostu uzyskać wymagany współczynnik skali ze stosunku między rzeczywistym i pożądanym rozmiarem i przypisać wynik. Pętla while blokuje program tylko na chwilę (lub jeśli masz błąd jak w tym przypadku: na zawsze). Uwzględnij także współczynnik proporcji, możesz chcieć zaktualizować skalę x/y osobno. – LearnCocos2D
dlaczego the accumulatedFrame? Jeśli węzły nie mają żadnych dzieci, jest to identyczne z ramką. Jeśli ma dzieci, nie skaluje zawartości sprite'a do nowego rozmiaru, ale do całkowitej wielkości sprite'a i jego dzieci. – LearnCocos2D