Cocos2D - 精灵的 userData 属性

3

我正在使用Cocos2d开发一款iPhone游戏应用。

我发现这是一个很好的解决方案,可以将整数存储到精灵属性中:

sprite.userData = 123;

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

3个回答

2
“userData”实际上是一个空指针,不被“Node”类保留:
void *userData_;

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


0
将ccsprite类扩展为userdata类,并使用该类来创建任意数量的变量...但是您需要在所有检查和条件中使用该类....

这里是代码:

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


0

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

就像一个熟练的Objective-C程序员所做的那样。

明确回答您的问题:您可以将NSDictionary或NSArray设置为userData,它们本身可以包含多个项目。但如果你要走得那么远:请参阅上文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接