使用CCSprite子類Creature時出現奇怪的問題。如何在NSUserDefault中存儲CCSprite
讓我們的目標是生物*生物;
類生物申述
@interface Creature : CCSprite <NSCoding>{
int creatureAge;
NSString *creatureName;
}
實施
+(id)initializeCreatureWithType:(int)type
{
Creature *creature = nil;
creature = [[[super alloc] initWithFile:[NSString stringWithFormat:@"ch%i_default.png",type]]autorelease];
return creature;
}
問題是,當我在我的生物類對象 '生物' 存儲在NSUserDefault using-
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.creatureName forKey:@"creatureName"];
[encoder encodeInt:self.creatureAge forKey:@"creatureAge"];
}
而解碼 -
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
self.creatureName = [decoder decodeObjectForKey:@"creatureName"];
self.creatureAge= [decoder decodeIntForKey:@"creatureAge"];
}
然後保存生物對象using-
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:creature];
[defaults setObject:myEncodedObject forKey:@"my_pet"];
而且負載
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [defaults objectForKey:@"my_pet"];
Creature* newcreature = (Creature *)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
的問題是,當我加載此我得到以前存儲的生物的屬性值,但分配給先前生物的圖像可能不會被複制。因爲如果我將newcreature添加到任何CCLayer,它不會顯示任何圖像,但它會獲得先前生物的屬性值。
現在我能做些什麼來獲得具有圖像的新生物?是否需要將圖像名稱添加爲單獨的屬性?
好吧,最可能的答案是 - 需要對屬於某個類的所有內容進行編碼/解碼。所以如果我想要對象的對應圖像,那麼還需要對它進行編碼/解碼。 – russell