2012-02-03 3 views
0

두 개의 장면 (mainMenu)과 다른 장면 (HelloWorldScene)이 있습니다. 장면을 바꾸어 장면을 전환 할 수 있지만 두 번째로로드하려고 시도한 후에 init 메서드가 호출되지 않습니다.cocos2D가 클래스를 초기화하지 않는 장면을 대체합니다.

여기까지 내 노력이 있습니다.

제 질문은 장면을 바꾸는 동안 해당 클래스에 - (id) init 메소드를 호출하는 방법입니다.

답변

0

init 메서드는 일반적으로 개체가 처음 만들어 질 때만 호출되도록 설계되었습니다. 장면으로 다시 전환 할 때 자신 만의 (void) switchBack 메서드를 작성하고 장면을 적절하게 업데이트하기 위해 호출 할 수 있습니다 (모든 경우를 다시 추가하지 않으려는 경우 init 메서드와 매우 다를 수 있습니다)).

나는이 문제가 생겼다. 결국 나는 새로운 장면을 만들었고 (현재의 장면을 풀어 놓았다.) 장면을 전환 할 때 비용이 많이 들지 않았다. 장면 전환 후에 사용되지 않는 텍스처를 모두 릴리스 할 수있어서 좋았습니다. 업데이트하는 것에 대해 걱정할 필요가 없었습니다.

1

이 작업을 수행하지 마십시오 : 당신은 이미 존재하는 객체 (에는 mainMenu를) 다시 초기화를 시도하고

[[CCDirector sharedDirector] replaceScene:[mainMenu node]]; 

.

[[CCDirector sharedDirector] replaceScene:mainMenu]; 

당신이 초기화를 기대하고 있기 때문에 그러나 당신의 새로운 인스턴스를 생성 할 호출 할 : 당신이 (내가 추가 할 수 있습니다 오히려 이상한) 같은 노드를 사용하려는 경우, 당신은이 방법을 수행해야

[[CCDirector sharedDirector] replaceScene:[MainMenu node]]; 
+0

mainMenu.h를 가져 왔지만 해당 문을 사용하면 오류가 발생합니다 (예기치 않은 인터페이스 이름 'mainMenu': 예상되는 표현식입니다. 초기화하지 않으려는 경우에도 노드를 사용해야합니다. –

0

init 메소드 호출했지만 몇 가지 : 당신은 클래스 자체에 노드 메시지를 보내 [HelloWorldLayer 현장]에서와 동일한 방법으로 달성하는 것을 주 메뉴 (MAINMENU 가정하면 클래스의 이름입니다) 변수가 재설정되지 않았으므로 메소드에서 수동으로 재설정해야했습니다.

HellowWorldLayer에 대한 핸들을 만들면 해당 클래스 내에 정의 된 모든 메소드를 호출 할 수 있습니다.

HelloWorldLayer *hw = [HelloWorldLayer node]; // This is how we create the handle. 
[hw Testing]; // This is how we call any method inside. 

[[CCDirector sharedDirector]replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5 scene:hw]]; // Use that handle for changing the scene 

누군가 도움이되기를 바랍니다.