1

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を使用しています

4

1 に答える 1

2

これは、私が自分のゲームに使用した素晴らしいシングルトン チュートリアルであり、うまく機能します: http://getsetgames.com/2009/08/30/the-objective-c-singleton/

于 2012-07-24T21:37:36.580 に答える