我有一个SkSpriteNode的子类,名为GoodGuy.h/.m,还有一个类叫ShopScene。在GoodGuy.m
中,我声明它:
+(id)guy{
GoodGuy *goodGuy =[GoodGuy spriteNodeWithColor:[self choosenColor] size:CGSizeMake(40, 40)];
SKSpriteNode *leftEye = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(5,5)];
[goodGuy addChild:leftEye];
leftEye.position = CGPointMake(-3, 8);
SKSpriteNode *rightEye = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(5,5)];
rightEye.position = CGPointMake(13, 8);
[goodGuy addChild:rightEye];
goodGuy.name= @"guy";
goodGuy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:goodGuy.size];
goodGuy.physicsBody.categoryBitMask = guyCatergory;
goodGuy.physicsBody.categoryBitMask = obstacleCatergory | groundCatergory;
return goodGuy;
}
+(id)choosenColor{
UIColor *color;
long blueBought;
long redBought;
[[NSUserDefaults standardUserDefaults] setInteger:blueBought forKey:@"Blue has been bought"];
[[NSUserDefaults standardUserDefaults] setInteger:redBought forKey:@"Red has been bought"];
if (blueBought > 1) {
blueBought=1;
redBought = 0;
}
if (blueBought ==1) {
redBought =0;
color = [UIColor blueColor];
[[NSUserDefaults standardUserDefaults] setInteger:blueBought forKey:@"Blue has been bought"];
printf("boughtBlue = %li boughtRed = %li n",blueBought, redBought);
}
if (redBought == 1) {
blueBought=0;
printf("boughtBlue = %li boughtRed = %li n",blueBought, redBought);
color = [UIColor redColor];
[[NSUserDefaults standardUserDefaults] setInteger:blueBought forKey:@"Blue has been bought"];
[[NSUserDefaults standardUserDefaults] setInteger:redBought forKey:@"Red has been bought"];
}
return color;
}
我试着把"好家伙"的颜色从商店改成长款,但没用。我在ShopScene.m
:中有这个
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *touch=[touches anyObject];
CGPoint location =[touch locationInNode:self];
SKNode *node =[self nodeAtPoint:location];
if ([node.name isEqualToString:@"blue"]) {
boughtBlue = 1;
boughtRed = 0;
printf("boughtBlue = %li boughtRed = %li n",boughtBlue, boughtRed);
[[NSUserDefaults standardUserDefaults] setInteger:boughtBlue forKey:@"Blue has been bought"];
SKTransition *transition =[SKTransition pushWithDirection:SKTransitionDirectionDown duration:1.0];
GameScene *myScene =[[GameScene alloc] initWithSize:CGSizeMake(self.size.width, self.size.height)];
[self.scene.view presentScene:myScene transition:transition];
}
if ([node.name isEqualToString:@"red"]) {
boughtBlue=0;
boughtRed = 1;
[[NSUserDefaults standardUserDefaults] setInteger:boughtRed forKey:@"Red has been bought"];
[[NSUserDefaults standardUserDefaults] setInteger:boughtBlue forKey:@"Blue has been bought"];
printf("boughtBlue = %li boughtRed = %li n",boughtBlue, boughtRed);
SKTransition *transition =[SKTransition pushWithDirection:SKTransitionDirectionDown duration:1.0];
GameScene *myScene =[[GameScene alloc] initWithSize:CGSizeMake(self.size.width, self.size.height)];
[self.scene.view presentScene:myScene transition:transition];
}
}
我可以把颜色改成蓝色,但不能改成红色。有什么想法吗?
您是否尝试从if(节点名称为红色)touchesBegan方法中删除此行:
[[NSUserDefaults standardUserDefaults] setInteger:boughtBlue forKey:@"Blue has been bought"];
还有,为什么这个是蓝色的而不是红色的?
if (blueBought > 1) {
blueBought=1;
redBought = 0;
}
更新:
我认为您在选择的颜色中将NSUserDefaults值设置为0。在你的原始代码中,试着这样更改代码(我已经添加了更改位置的注释):
+(id)choosenColor{
UIColor *color;
// Here you were setting your NSUserDefaults to 0 (you had just created the blueBought and redBought)
// Change to to the following
long blueBought = [[NSUserDefaults standardUserDefaults] integerForKey:@"Blue has been bought"];
long redBought = [[NSUserDefaults standardUserDefaults] integerForKey:@"Red has been bought"];
// The rest is the same as your
// original code
if (blueBought > 1) {
blueBought=1;
redBought = 0;
}
if (blueBought ==1) {
redBought =0;
color = [UIColor blueColor];
[[NSUserDefaults standardUserDefaults] setInteger:blueBought forKey:@"Blue has been bought"];
printf("boughtBlue = %li boughtRed = %li n",blueBought, redBought);
}
if (redBought == 1) {
blueBought=0;
printf("boughtBlue = %li boughtRed = %li n",blueBought, redBought);
color = [UIColor redColor];
[[NSUserDefaults standardUserDefaults] setInteger:blueBought forKey:@"Blue has been bought"];
[[NSUserDefaults standardUserDefaults] setInteger:redBought forKey:@"Red has been bought"];
}
return color;
}