Cocos2D - свойство userData для спрайта - PullRequest
3 голосов
/ 03 сентября 2011

Я разрабатываю игровое приложение для iphone, используя Cocos2d.

Я считаю, что это отличное решение моей проблемы хранения целочисленного свойства спрайта:

sprite.userData = 123;

Однако sprite.userData может хранитьтолько один кусок данных.Если мне нужно сохранить три фрагмента данных, как лучше всего это сделать?

Ответы [ 3 ]

2 голосов
/ 03 сентября 2011

'userData' на самом деле является пустым указателем, который не сохраняется классом 'Node':

void *userData_;

Как таковой, он может указывать на любую структуру данных или класс (или даже функцию C).

0 голосов
/ 31 декабря 2013

Расширьте класс 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 голосов
/ 03 сентября 2011

Лучшая ставка для одной или девяти пользовательских переменных - это создать подкласс CCSprite и использовать свои пользовательские переменные в качестве переменных класса нового класса, используя свойства для их открытого чтения / записи.

Как хорошо бы поступил опытный программист Objective-C.

Чтобы явно ответить на ваш вопрос: вы можете установить NSDictionary или NSArray в userData, которые сами могут содержать более одного элемента. Но если вы идете так далеко: читайте выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...