如何从另一个类更改SkSpriteNode的颜色



我有一个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;
}

最新更新