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는
나는 확실히 이것을 권장하지만, 당신은 또한 모든 놀이로 장면을 초기화 할 수있다. 데이터. – tallen11
@ 오메가 덕분에, 나는 싱글 톤 패턴을 사용했고 그것을 좋아합니다. AppDelegate에 클래스를 할당 한 다음 필요한 곳에 액세스합니다. 청결을 위해 게임을 시작할 때 "로딩 장면"에로드하는 것을 생각하고 있으므로 게임 전용 클래스를 사용하여 응용 프로그램 대리인을 "더럽지"않습니다. – mm24
@ mm24 : 음, 예, 뭔가있을 경우 당신은 전 세계적으로 개최 할 필요가 없습니다, 싱글 톤 접근 방식은 필요하지 않을 수도 있습니다. 하지만 플레이어 수준, 통계, 통화, 재생 시간 등과 같이 나중에 사용하기 위해 게임에 저장해야하는 파일 데이터 저장과 같은 작업에는 유용합니다. 또한 코드를 오히려 깨끗하게 만들 수 있습니다. 아마도 모든 플레이어 관련 데이터를 싱글 톤 내 NSDictionary에 넣는 등일 것입니다. – Voldemort