2011-09-02 30 views
2

我正在开发使用Cocos2d的iphone游戏应用程序。Cocos2D - 用于精灵的userData属性

我觉得这是我的存储问题的整数精灵的属性优秀的解决方案:

sprite.userData = 123;

但是,sprite.userData只能存储一块数据。如果我需要存储三部分数据,那么最好的方法是什么?

回答

0

对于一个或九个自定义变量,最好的方法是对CCSprite进行子类化,并将您的自定义变量作为新类的类变量,使用属性来公开读/写它们。

像精通Objective-C程序员一样。

要明确回答您的问题:您可以将NSDictionary或NSArray设置为userData,其本身可以包含多个项目。但是,如果你走得很远:阅读上面。

2

“用户数据”实际上是不是由“节点”类保留空指针:

void *userData_; 

因此,它可以指向任何数据结构或类(或甚至是C函数)。

0

扩展ccsprite类到用户数据类和使用该类任何不变量要创建的......然而,你将需要使用类所有检查和条件....

这里取代码

Userdata.h

// 
// UserData.h 
// 
// 


#import "CCSprite.h" 
#import "Constants.h" 

@class GameLayer; 
@interface UserData : CCSprite { 
    int userDataType; 
    int tag; 
    int parentTag; 
     GameLayer *gameLayer; 
    BOOL readyForDeletion; 
} 

@property(nonatomic) int userDataType; 
@property(nonatomic) int tag; 
@property(nonatomic) int parentTag; 
@property(nonatomic, assign) GameLayer *gameLayer; 
@property(nonatomic) BOOL readyForDeletion; 

-(id) initWithSpriteName:(NSString *)spriteName; 

@end 

和userdata.mm

// 
    // UserData.mm 
    // 
    // 

    #import "UserData.h" 

    @implementation UserData 

    @synthesize userDataType; 
    @synthesize tag; 
    @synthesize parentTag; 
    @synthesize gameLayer; 
    @synthesize readyForDeletion; 

    -(id) initWithSpriteName:(NSString *)spriteName { 
     if (self = [super initWithFileName:spriteName]) { 

     } 
     return self; 
    } 

    -(void) onExit { 
     [super onExit]; 
    } 

    -(void) dealloc { 
     [super dealloc]; 
    } 

@end