2013-03-21 1 views
0

저는 장면 사이의 전환을 어떻게 구현할 것인지 궁금합니다.objective c와 cocos2d가 객체 관리를 할당했습니다.

내 앱의 ccscene1class1이고 ccscene2class2입니다.

scene1에서 scene2로 전환 할 때 scene1 init 메소드에 할당 된 인스턴스가 많아서 장면을 살 때마다 할당/해제하려고하지 않습니다. 어떻게 모든 할당 된 인스턴스 (및 그 중 일부는 서버 TCP 연결)가 2에서 돌아 왔을 때 처음으로 실행될 때 할당되지 않고 여전히 모든 장면 전환 중에 유효하게 유지되도록 scene1을 구현할 수 있는지 궁금합니다.

한 용액

: 글로벌 플래그를 설정하고, 대표로부터이 장면 l의 초기화 방법의 첫 시작인지 확인하고, 객체를 할당보다 먼저 실행에 1로 설정.

내가 scene1을 떠난 후,이 객체는 내가 돌아 왔을 때 유효 할 것입니다? (나는 그들을 풀어주지 않는다고 말하며)?

주요 목표는 각 전환 서버에 연결, 그리고 내가 할 수있는 "전문"방법을 모색하고

-(id) init 
{ 
    if((self=[super init])) 

    { 
     socketInstance=[[SocketConnector alloc]init]; //only once ! 
     socketInstance.delegate=self; 

    //later on i have transition : 

    [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.7f scene:[AdressBookScene scene]]]; 

(경우에 내가 solution1을 사용하고 있습니다) 유효 장면 l에서 대리자 인스턴스를 유지하지 않는 것입니다 이 .

+2

전문적인 관리 방법은 다른 클래스가 할당 된 모든 것을 처리하도록하는 것입니다. 할당 할 수있는 곳에서 가져 와서 무료로 사용할 수 있습니다. 간단한 기본 프록시 클래스가 트릭을 수행합니다. 그러나 당신이 그 (것)들을 해방 할 때보다는 당신이 그 (것)들을 이용하는 클라이언트보다는 너무 보장 된 ㄴ다는 것을 보장해야한다. –

+0

간단한 대답은 장면을 초기화 할 때마다, 장면의 init 코드에서 변경할 때마다 변경하지 않으려는 오브젝트 만들기를 취하여 다른 곳에 넣는 것입니다. – dqhendricks

답변

1

pushScene을 사용하여 scene2를 실행할 수 있습니다. 그러면 장면 1을 완전히 보존하고 그것을 메모리에 보관합니다. 그런 다음 다른 장면과 함께 replaceScene 장면 2를 계속 진행하고 popScene으로 전화를 걸어 장면 1로 돌아갈 수 있습니다.

+0

이것은 상황에 따라 좋은 대답이기도합니다. 두 번째 장면이 일시적으로 실행되고 장면 2를 실행할 때 장면 1의 메모리를 확보 할 필요가없는 경우이 코드를 사용합니다. – dqhendricks

+0

@ LearnCococs2D 감사합니다.하지만 푸시 장면을 권장하지는 않습니다. 맞지? scene2는 단지 약간의 이미지를 고르는 것일뿐입니다. – Curnelious

관련 문제