2014-04-21 4 views
3

두 번째 다른보기 컨트롤러는 첫 번째에 SKScene입니다. 거기서 우리는 게임 자체를 발견하고 두 번째에는 "Replay"버튼으로 점수를 찾습니다. 게임이 끝나면 장면을 삭제하고 "Replay"를 클릭하면 allocinit가 다시 나타납니다. 내 문제는 특정 SKSpriteNode이 게임이 종료되었을 때 회전하여 삭제하고 다시 설정 한 다음 해당 장면으로 돌아 가면 장면을 삭제하기 전과 동일한 각도로 회전 된 상태로 유지된다는 것입니다. -initWithSize이 제대로 호출되었으므로 그 이유가 확실하지 않습니다. 제 질문은 SKScene을 다시 설정하여 게임을 처음 실행했을 때와 동일한 방법이 있는지입니다. 감사!SpriteKit의 장면 재설정

+0

넣어'NSLog'. 네 장면이 할당 해제되지 않은 것 같아. –

+1

'presentScene'을 사용하여 간단히 장면을 다시 불러올 수 있습니다. – ZeMoon

+0

@AndreyGordeev 방금 시도해 본 결과'dealloc' 메서드가 호출되고 있습니다. –

답변

3

예, 처음부터 장면을 생성하고 불러내는 방법을 만듭니다. 속성 인 객체가있는 경우 장면 생성 방법을 호출하기 전에 부모에서 객체를 제거하십시오.

예 :

-(id)initWithSize:(CGSize)size { 
    [super initWithSize:size]; 
    [self startNewGame]; 
    return self; 
} 

-(void)startNewGame { 
//all your scene configs here 
} 

-(void)buttonThatsCalledOnRestartClick { 
    [self startNewGame]; 
} 

다시 시작할 때 현장에서 제거하지 않는 때문에 같은 자리에 스프라이트를보고있는 이유입니다. 아마도 장면을 완전히 다시 빌드해야하기 때문에 장면에서 모든 오브젝트를 제거한 다음 "startNewGame"메소드를 다시 호출해야합니다. 현장에서 모든 개체를 제거

예 : 장면의`dealloc` 방법

for (SKNode* node in self.children) { 
    [node removeFromParent]; 
} 
+1

SKNode 클래스의 removeAllChildren 메서드를 사용하여 씬에 하나의 컴파운드 레이어를 사용하고 모든 자식 노드를 삭제하는 것이 좋습니다. – AndrewShmig