2012-07-03 3 views
2

그래서 현재 그래프와 같은 것들을 화면에 그려주는 앱을 만들고 있습니다. 그것을 테스트하면서 기능성이 문제를 겪었습니다.cocos2d - CCDirector, replaceScene 함수 문제

버튼을 누르면 설정 장면으로 이동합니다. 나는 두 개의 더 많은 버튼, 다 된 버튼이 그 장면이

+(id) scenew 
{ 
    CCScene *scene = [CCScene node]; 
    Settings *layer = [Settings node];  
    [scene addChild: layer]; 
    return scene; 

}

같은 장면을 초기화하고 새로운 버튼거야.

done = [CCMenuItemImage itemFromNormalImage:@"done.png" selectedImage:@"done.png" target:self selector:@selector(done:)]; 

새로운 기능 단추를 누르면 즉시 실행되지만 완료된 단추는 2-3 초 지연됩니다. 앱에 몇 가지 콘솔 메시지가 표시되며 앱을 시작할 때와 마찬가지로 전체 그래프가 다시 계산되는 것으로 보입니다. 모든 버튼은 replaceScene과 동일한 CCDirector 함수를 호출합니다.

-(void) whatNew: (id)sender 
{ 
[[CCDirector sharedDirector] replaceScene: [New scene]]; 
} 

-(void) done: (id)sender 
{ 
[[CCDirector sharedDirector] replaceScene: [Main scene]]; 
} 

이 조금을 최적화하는 방법이 있습니까 ... 내 말 ... replaceScene, 또는를 사용하는 효율적인 방법을 어쩌면 그래프의 재 계산을 강제하지 않는 뭔가? 그 버튼을 누를 때마다 실제적으로 4500+ 라인을 가진 그래프 클래스 구현의 최상위 점프 O.o

답변

2

Setting 장면으로가는 Main 장면 안에있는 첫 번째 버튼이 있다고 가정합니다. 단순히 내부 Setting 현장에서,

// in Main scene class 
[[CCDirector sharedDirector] pushScene:[Setting scene]]; 

그런 다음 Setting 현장에 응용 프로그램의 흐름을 전송하는 동안

은 당신이해야 할 replaceScene: 대신 pushScene:을 사용하는 것입니다, 메모리에 Main 장면을 유지하려면 Main 장면으로 돌아 popScene를 사용

-(void) done: (id)sender 
{ 
    [[CCDirector sharedDirector] popScene]; 
} 

기본적으로 pushScene: 단순히 새로운 SC를 밀어 popScene이 현재 장면 상단에 표시되면 앱 흐름이 기기 메모리에 남아있는 이전 장면으로 되돌아갑니다.

+0

괜찮아요. 오늘 이걸 시험해 볼게요. 어떻게 작동하는지 알게 될 겁니다. –

+0

이 솔루션에 감사합니다. :) –