2012-07-24 2 views
1

CCNode에서 파생 된 PlayerData 클래스가 있는데, 게임의 다양한 장면 사이에서 정적 싱글 톤 인스턴스로 공유하고 싶습니다.Cocos2d : 장면 사이에서 플레이어 데이터를 공유하는 방법

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
@interface PlayerData : CCNode { 

} 

@property (readwrite, nonatomic) int data; 
+(id) playerData; 
+(PlayerData*) sharedPlayerData; 

#import "PlayerData.h" 
@implementation PlayerData 
@synthesize data; 
static PlayerData* instanceOfPlayerData; 

+(id) playerData 
{ 
    if(instanceOfPlayerData==nil){ 
     return [[self alloc] init]; 
    }else { 
     return [self sharedPlayerData]; 
    } 
} 

+(PlayerData*) sharedPlayerData{ 
    NSAssert(instanceOfPlayerData != nil, @"PlayerData instance not yet initialized!"); 
    return instanceOfPlayerData; 
} 


-(id) init 
{ 
    if ((self = [super init])) 
    { 
     instanceOfPlayerData=self; 
     data=0; 
     } 
    return self; 
} 
@end 

이 할당 할 수있는 권리 장소입니다 :

나는 다음과 같은 구현을 시도? AppDelegate 클래스에 추가하고 액세스하는 방법에 대해 생각했지만 조용하게 할 수는 없습니다.

sharedDirector에서 값이 부족한 항목에 액세스 할 수 있지만 AppDelegate 클래스로 캐스팅하지 않으면 올바른 것이 아니라고 생각합니다. 어떠한 제안?

[[CCDirector sharedDirector] delegate]; 

그리고 이것은 템플릿으로 내 AppDelegate에 클래스입니다 :

#import <UIKit/UIKit.h> 
#import "cocos2d.h" 

@interface AppController : NSObject <UIApplicationDelegate, CCDirectorDelegate> 
{ 
    UIWindow *window_; 
    UINavigationController *navController_; 

    CCDirectorIOS *__unsafe_unretained director_;       // weak ref 
} 

@property (nonatomic) UIWindow *window; 
@property (readonly) UINavigationController *navController; 
@property (unsafe_unretained, readonly) CCDirectorIOS *director; 

@end 

PS : ARC는

답변

2

활성화와 나는이 내가 사용하는 멋진 싱글 튜토리얼적인 Cocos2D의 버전 2.x를 사용하고 내 게임과 작품을 위해 : http://getsetgames.com/2009/08/30/the-objective-c-singleton/

+0

나는 확실히 이것을 권장하지만, 당신은 또한 모든 놀이로 장면을 초기화 할 수있다. 데이터. – tallen11

+0

@ 오메가 덕분에, 나는 싱글 톤 패턴을 사용했고 그것을 좋아합니다. AppDelegate에 클래스를 할당 한 다음 필요한 곳에 액세스합니다. 청결을 위해 게임을 시작할 때 "로딩 장면"에로드하는 것을 생각하고 있으므로 게임 전용 클래스를 사용하여 응용 프로그램 대리인을 "더럽지"않습니다. – mm24

+1

@ mm24 : 음, 예, 뭔가있을 경우 당신은 전 세계적으로 개최 할 필요가 없습니다, 싱글 톤 접근 방식은 필요하지 않을 수도 있습니다. 하지만 플레이어 수준, 통계, 통화, 재생 시간 등과 같이 나중에 사용하기 위해 게임에 저장해야하는 파일 데이터 저장과 같은 작업에는 유용합니다. 또한 코드를 오히려 깨끗하게 만들 수 있습니다. 아마도 모든 플레이어 관련 데이터를 싱글 톤 내 NSDictionary에 넣는 등일 것입니다. – Voldemort