2014-11-23 4 views
5

iOS 게임에 여러 게임 개체가 있습니다. 일부 게임 개체는 다른 게임 개체보다 더 큰 해상도를 가지고 있습니다. 게임 개체에 사용할 그래픽은 런타임에 임의로 선택됩니다. 내가 사용 때 모두가 특정 크기에 가서하지 않도록하고 싶습니다, 그래서 나는 다음과 같은 알고리즘을 고안 : spriteNode 텍스처 그래픽과 RSIZE 객체가크기 조정 및 스케일링 SKSpriteNode

while self.spriteNode.rSize.width > 100 && self.spriteNode.rSize.height > 100 { 
    self.xScale -= 0.01 
    self.yScale -= 0.01 
} 

가 확장입니다 누적 된 프레임의 크기를 반환하는 SKSpriteNode의 계산 된 속성입니다.

종종 무한 루프가 발생합니다. 뭐가 문제 야?

UPDATE

1 LearnCocos2D의 의견을 바탕으로, 나는 다음과 같은 시도 :

let reqXScale = 50/self.spriteNode.rSize.width 
let reqYScale = 50/self.spriteNode.rSize.height 
self.xScale = reqXScale 
self.yScale = reqYScale 

이 무한 루프 문제를 해결하지만, 일부 개체는 원래의 화면비를 유지하기보다는 찌그러된다.

var rSize: CGSize { 
    return self.calculateAccumulatedFrame().size 
} 

내가 전에이 안정적으로 여러 번 사용했다 :

또한, 여기 RSIZE를 정의하는 코드입니다.

+1

rSize를 정의하는 코드를 게시 한 경우 도움이됩니다. – 0x141E

+1

끔찍한 코드인데, 실제 크기와 원하는 크기 사이의 비율에서 필요한 축척 비율을 유도하고 결과를 지정할 수 있습니다. while 루프는 잠시 동안 만 프로그램을 차단합니다 (또는이 경우에는 영원히 버그가있는 경우). 또한 종횡비를 고려하여 x/y 스케일을 개별적으로 업데이트 할 수 있습니다. – LearnCocos2D

+0

누적 된 프레임은 왜 표시됩니까? 노드에 자식이 없으면 frame과 동일합니다. 자식이 있으면 스프라이트의 내용을 새로운 크기로 조정하지 않고 스프라이트와 그 자식의 전체 크기를 조절합니다. – LearnCocos2D

답변

4

나는 그것을 알아낼 수 있었다. 그게 내가 필요로하기 때문에 임의의 너비를 사용하고 있습니다.

// Scaling 
let aspectRatio = self.spriteNode.rSize.width/self.spriteNode.rSize.height 
let randWidth = CGFloat(rand(60, 90)) 
self.spriteNode.size = CGSize(width: randWidth, height: randWidth/aspectRatio) 
+0

정확히 60px 너비의 대상체를 그리는 방법은 무엇입니까? 거대한 크기로 그려진다. –

관련 문제