CCSpriteのサブクラスCreatureで作業する際に奇妙な問題があります。NSUserDefaultにCCSpriteを保存するには
私の対象は、「クリーチャー*」のクリーチャーです。
クラスクリーチャーはdeclaration-
@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"];
}
その後
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];
問題は、私はこれをロードしたときに、私が以前に格納された生き物のプロパティ値を取得するということですが、using-生き物オブジェクトを保存以前の生き物に割り当てられた画像はおそらくコピーされません。なぜなら、以前のクリーチャーのプロパティ値を取得するにもかかわらず、私は任意のCCLayerにnewcreatureを追加するとイメージを表示しないからです。
新鮮な画像を取得するにはどうしたらいいですか?別のプロパティとしてイメージ名を追加する必要がありますか?
確かに、答えは、特定のクラスに属するすべてをエンコード/デコードする必要があります。だから私はオブジェクトを使用して対応するイメージが必要な場合、これもエンコード/デコードする必要があります。 – russell