CCNodeから派生したPlayerDataクラスを取得し、静的シングルトンインスタンスとしてゲームのさまざまなシーン間で共有したいと思います。
私は次の実装を試しました:
#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を有効にしてCocos2dv2.xを使用しています