保存した状態から復元しているときに、SKSpriteNode がビューに表示されません。
保存および復元プロセス中にエラーや警告は発生しません。
このコードを使用してプレーヤー クラスを保存しています。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_player];
[defaults setObject:data forKey:@"player"];
[defaults synchronize];
私のプレーヤークラスには、次のエンコーダー/デコーダーがあります。
-(void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.currentPlatform forKey:@"currentPlatform"];
[encoder encodeObject:[NSNumber numberWithBool:self.floorContact] forKey:@"floorContact"];
[encoder encodeObject:[NSNumber numberWithInt:self.currentState] forKey:@"currentState"];
// and many more...
}
-(instancetype)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder:decoder]) {
_animations = [Animations sharedInstance];
self.texture = [_animations playerStart];
self.texture.filteringMode = SKTextureFilteringNearest;
self.name = @"player";
self.zPosition = 999;
// more physicsBody stuff...
self.currentPlatform = [decoder decodeObjectForKey:@"currentPlatform"];
self.floorContact = [[decoder decodeObjectForKey:@"floorContact"] boolValue];
self.currentState = [[decoder decodeObjectForKey:@"currentState"] intValue];
// and many more...
}
return self;
}
次に、次のコードでプレーヤーを復元します。
NSData *savedPlayer = [[NSUserDefaults standardUserDefaults] objectForKey:@"player"];
_player = [NSKeyedUnarchiver unarchiveObjectWithData:savedPlayer];
問題は、復元後にプレイヤー スプライトが表示されないことです。ただし、画面をタップすると、プレイヤーはジャンプ (ビューが上下に移動)、剣を振り (効果音あり)、ミサイルを発射 (ミサイルが表示されて移動) します。3 つのアクションはすべてプレイヤー クラスから開始されます。プレイヤースプライトが見えません。
編集:ビデオを追加しました
プレーヤー クラスの初期化のビデオ。
保存された状態からプレーヤー クラスを復元するビデオ: