Game Development Reference
In-Depth Information
return params;
} else{
return [NSKeyedUnarchiver unarchiveObjectWithData: data];
}
}
-(void)writeToDefaults{
NSData* data = [NSKeyedArchiver archivedDataWithRootObject:self];
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:GAME_PARAM_KEY];
[defaults synchronize];
}
readFromDefaults
and
writeToDefaults
. These two tasks are
readFromDefaults
will return a
GameParameter
for the key
GAME_PARAM_KEY
as stored in
writeToDefaults
writes a
GameParameter
to the user defaults for the key
. The key idea to both of these tasks is that we store a
GameParameter
in the user
purchases
. The
GameParameters
can be stored in an
NSUserDefaults
, because it implements the tasks from the
NSCoder
. See Chapter 2 for a description of that process.
10-1
. This is handled in the task
setGameParameters:
, as shown in Listing 10-6.
-(void)setGameParams:(GameParameters*)params{
gameParams = params;
NSSet* purchases = [gameParams purchases];
if ([params includeAsteroids]){
[asteroidButton setImage:[UIImage imageNamed:@"asteroid_active"] forState:UIControlStateNormal];
} else {
[asteroidButton setImage:[UIImage imageNamed:@"asteroid_inactive"] forState:UIControlStateNormal];
}
if ([purchases containsObject:PURCHASE_INGAME_SAUCERS]){
if ([params includeSaucers]){
[saucerButton setImage:[UIImage imageNamed:@"saucer_active"] forState:UIControlStateNormal];
} else {
[saucerButton setImage:[UIImage imageNamed:@"saucer_inactive"] forState:UIControlStateNormal];
}
} else {
[saucerButton setImage:[UIImage imageNamed:@"saucer_purchase"] forState:UIControlStateNormal];
}
if ([purchases containsObject:PURCHASE_INGAME_POWERUPS]){
if ([params includePowerups]){
[powerupButton setImage:[UIImage imageNamed:@"powerup_active"] forState:UIControlStateNormal];
} else {
[powerupButton setImage:[UIImage imageNamed:@"powerup_inactive"] forState:UIControlStateNormal];