나는 레벨을 선택하고있는 내 게임의 레벨 장면이 있습니다. 이 장면에서는 CCLabelTTF에서 선택된 레벨을 표시하고 있습니다. 이제이 라벨에 표시된 값을 내 메인 장면으로 전달하고 싶습니다. 나는 다음과 같이 이것을하고있다 :한 장면에서 다른 장면으로 변수 전달하기 - Cocos2D
HelloWorld *hello=[HelloWorld getInstance]; //HelloWorld is main scene
hello.strLevel=[lblLevel string]; //strLevel is NSString to which I am passing the label text
[[CCDirector sharedDirector]replaceScene:[HelloWorld node]];
내 HelloWorld 장면에서는 싱글 톤을 사용하여 레벨 장면에서 사용되는 레이블의 값을 공유한다. 제어()를 호출
instance=[HelloWorld new];
초기화를 도달
//HelloWorld.h
@interface HelloWorld : CCColorLayer
{
NSString *strLevel;
}
@property(nonAtomic,retain)NSString *strLevel;
+(HelloWorld*)getInstance;
HelloWorld.mm
@implementation HelloWorld
@synthesize strLevel;
static HelloWorld *instance=nil;
__________________________
//Some code
__________________________
+(HelloWorld*)getInstance
{
if(instance==nil)
{
instance=[HelloWorld new];
}
return instance;
}
그러나이 곧 working.As 없습니다. 그리고 왜 안돼. 그러나 컨트롤이 값을 전달하는 줄의 레벨 장면으로 돌아 오면 아무 일도 일어나지 않고 HelloWorld는 strLevel에 대해 null 값을 표시합니다.
저는 싱글 톤이 AppDelegate보다 값을 전달하는 더 좋은 방법이라는 것을 알고 있습니다. 하지만 그렇게 할 수 없습니다. 누군가 나를 교정 할 수 있습니까?
감사합니다.
감사합니다. 이들은 정말 훌륭한 토론이었습니다. 하지만 내 문제는 다른 장면에서 싱글 톤을 사용하는 데있다. 싱글 톤을 사용하면 두 장면 사이에서 가치를 나눌 수 없습니다. 나는 어딘가 잘못 알고 있지만 어디 있는지 모른다. – Nitish
[[MySingleton sharedInstance] myMethod]와 같이 static이기 때문에 프로그램의 어느 곳에서나 싱글 톤 객체를 호출 할 수 있습니다. sharedInstance는 클래스 함수이며 this + (MySingleton *) sharedInstance와 비슷하게 클래스 MySingleton *에 정적으로 할당 된 객체에 ptr을 반환합니다. myMethod는 인스턴스 메소드입니다. 그 트릭은 싱글 톤은 프로그램이 종료 될 때까지 살아 있다는 것입니다. 당신이 필요하다고 생각하지 않는 한 그것을 풀어주지 않았습니다. 또한 sharedInstance 호출에서 한 번만 수행되기 때문에 싱글 톤을 할당/초기화 할 필요가 없습니다. CCDirector 역시 싱글 톤입니다. –
그리고 장면이 빠르게 변하기 때문에 장면을 싱글 톤으로 정의하지 않겠습니다. 당신은 기억 속의 모든 장면들에 집착하게 될 것입니다. 오히려 데이터를 저장하는 sharedData 클래스를 빌드하십시오. 그리고 이것이 여러분의 문제가 어디에 있다고 생각합니다 [[CCDirector sharedDirector] replaceScene : [HelloWorld node]]; 왜냐하면 호출 노드가 실제로 HelloWorld 장면의 새로운 자동 릴리즈 인스턴스를 반환하기 때문입니다. –