我正在开发使用Cocos2d的iphone游戏应用程序。Cocos2D - 用于精灵的userData属性
我觉得这是我的存储问题的整数精灵的属性优秀的解决方案:
sprite.userData = 123;
但是,sprite.userData只能存储一块数据。如果我需要存储三部分数据,那么最好的方法是什么?
我正在开发使用Cocos2d的iphone游戏应用程序。Cocos2D - 用于精灵的userData属性
我觉得这是我的存储问题的整数精灵的属性优秀的解决方案:
sprite.userData = 123;
但是,sprite.userData只能存储一块数据。如果我需要存储三部分数据,那么最好的方法是什么?
对于一个或九个自定义变量,最好的方法是对CCSprite进行子类化,并将您的自定义变量作为新类的类变量,使用属性来公开读/写它们。
像精通Objective-C程序员一样。
要明确回答您的问题:您可以将NSDictionary或NSArray设置为userData,其本身可以包含多个项目。但是,如果你走得很远:阅读上面。
“用户数据”实际上是不是由“节点”类保留空指针:
void *userData_;
因此,它可以指向任何数据结构或类(或甚至是C函数)。
扩展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