2013-10-26 1 views
1

레벨이 동일한 직사각형 블록으로 구성된 Sprite Kit를 사용하여 간단한 게임을 작성합니다. 그러나 많은 블록 (예 : 1000)에 추가하면 게임 속도가 매우 느려집니다 (FPS가 20으로 떨어집니다). 다음은 장면에 블록을 추가하는 방법입니다.SpriteKit에서 여러 번 동일한 스프라이트 추가하기

-(void)drawLevel 
{ 
    SKSpriteNode *shelf = [SKSpriteNode spriteNodeWithTexture:_initialLevel.earthBoxTexture]; 
    shelf.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:shelf.size]; 
    shelf.physicsBody.dynamic=NO; 
    shelf.physicsBody.categoryBitMask = platformCategory; 

    for (NSValue *positionValue in _initialLevel.boxPositions) 
    { 
     shelf.position = positionValue.CGPointValue; 
     [_platformsNode addChild:[shelf copy]]; 
    } 

    [_world addChild:_platformsNode]; 
} 

_world는 주요 장면의 하위 항목입니다. 한 번 "선반"을 만들고 복사합니다. 좋은 FPS를 얻으려면 어떻게해야합니까?

응용 프로그램은 아이폰 5

+0

장치 또는 시뮬레이터이 있습니까? 나는 주어진 답이 맞다고 생각하지만, 질문에 그 정보를 추가하는 것은 가치가있다. 시뮬레이터의 20fps와 장치의 20fps는 매우 다른 상황입니다. – prototypical

+0

한 노드 만 사용하는 솔루션의 경우 http://stackoverflow.com/a/37768928/763355 – MoDJ

답변

2

방법에 대한 테스트되었습니다 물리학기구와이 많은 스프라이트를 사용하지 어떻습니까?

천 개가 너무 많습니다. 특히 화면에 모두 표시되고 많은 신체가 접촉 이벤트 (즉, 누적되었을 때)를 생성하는 경우 특히 그렇습니다. 이 경우에는 모두 정적이므로 접촉 이벤트를 생성해서는 안됩니다. 여전히 많은 스프라이트를 그려야합니다.

모든 노드 또는 대부분의 노드에서 수행되는 코드는 문제를 더욱 악화시킵니다. 참고로, 내가 가지고있는 하나의 앱은 화면에 약 400 개의 스프라이트를 그려 넣고, 스크롤과 커스텀 게임 로직을 실행할 때 모두 업데이트합니다.이 앱은 iPod touch 5G에서 겨우 60fps를 만듭니다.

또한 장치의 성능을 테스트하십시오. 시뮬레이터를 사용하여 성능을 평가할 수는 없습니다.

+0

답변 해 주셔서 감사합니다. 대부분의 블록은 화면에 없습니다 (약 100 개는 화면에 표시됨). 지금까지 나는 접촉 이벤트가 꺼진 상태에서 그것을 테스트하지만 여전히 매우 느립니다. 그 블록들이 레벨의 일부이기 때문에 나는 침투 할 수 없도록 그들에게 필요한 것입니다 - 나는 물리 구조없이 그것을 할 수 있습니까? – user2923525

0

제대로 완료되면 엄청난 리소스를 절약 할 스프라이트 시트 맵을 사용하는 시스템을 사용하는 것이 좋습니다. 이를 없애기는 다소 까다 롭지 만, 스프라이트 시트의 각 섹션은 다른 방법으로 스프라이트와 상호 작용할 수있는 다른 오브젝트로 설정할 수 있습니다. 여전히이 문제를 해결할 방법을 찾고 있다면 행운을 빌어 요. 저는 SpriteKit으로 타일링 된 것을 배우고 있습니다. 그러나 매우 유망한 것으로 보입니다.

http://www.raywenderlich.com/62049/sprite-kit-tutorial-make-platform-game-like-super-mario-brothers-part-1 - SpriteKit

http://www.mapeditor.org과 타일을 사용하여 설명하는 튜토리얼 - 타일 웹 사이트

관련 문제