iOS Sprite Kit为什么我不能用白色重复colorizeWithColor?

时间:2013-12-21 03:44:53

标签: ios iphone uicolor sprite-kit blending

我正在尝试使用除scale之外的方法来选择sprite节点的方法。我最喜欢的一种方法是用白色着色,这可以明显地突出显示节点。

然而,我似乎无法多次用白色行为复制着色。 为什么我不能多次使用白色应用colorizeWithColor

除了使用的颜色外,这两个方法调用是相同的。如果我使用红色,灰色等,节点会通过闪烁来响应每次触摸。但如果我使用白色,它只会使用一次,然后再也不会对触摸做出响应。

[self runAction:[SKAction colorizeWithColor:[SKColor lightGrayColor] colorBlendFactor:0.8 duration:0.6] completion:^{

        [self runAction:[SKAction colorizeWithColorBlendFactor:0.0 duration:0.4]];
    }];

    [self runAction:[SKAction colorizeWithColor:[UIColor colorWithWhite:0.99 alpha:1.0] colorBlendFactor:0.8 duration:0.6] completion:^{

        [self runAction:[SKAction colorizeWithColorBlendFactor:0.0 duration:0.4]];
    }];

2 个答案:

答案 0 :(得分:6)

这很有趣 - 我不确定我有答案。使用白色着色会对节点产生不同于其他颜色的影响。

如果使用blueColor在精灵节点上执行着色并在模拟器中观察,颜色将保留。

[node runAction:[SKAction colorizeWithColor:[SKColor blueColor] colorBlendFactor:0.8 duration:0.6]];

但是,如果在带有whiteColor的精灵节点上执行着色并在模拟器中观察,它似乎会自动展开(即使没有任何完成块)。

[node runAction:[SKAction colorizeWithColor:[SKColor whiteColor] colorBlendFactor:0.8 duration:0.6]];

我找不到文档/头文件中可能出现这种情况的原因。还在寻找。

答案 1 :(得分:2)

我建议你制作一个着色方法,让你返回SKAction,例如:

-(SKAction*)colorizeChoosenSpriteNodeWithColor:(SKColor*)color
{
  SKAction *changeColorAction = [SKAction colorizeWithColor:color colorBlendFactor:1.0 duration:0.3];
  SKAction *waitAction = [SKAction waitForDuration:0.2];
  SKAction *startingColorAction = [SKAction colorizeWithColorBlendFactor:0.0 duration:0.3];
  SKAction *selectAction = [SKAction sequence:@[changeColorAction, waitAction, startingColorAction]];
  return selectAction;
}

如果您使用的是由SKColor或图像制作的SKSpriteNode,那么这一点非常重要。如果您尝试将SKSpriteNode着色为:

SKSpriteNode *node = [[SKSpriteNode alloc]initWithColor:[SKColor redcolor] size:CGSizeMake(8, 8)];

通过运行colorize Action,您将更改该颜色,并从上方使用“startingColorAction”,您将无法使其成为最近的颜色。

正如文档中所述: “创建一个动画,动画精灵的颜色和混合因子。”因此,通过将此Action运行到仅由SKColor创建的SKSpriteNode,它将更改颜色并使用colorblendfactor 0.0运行操作,它将不执行任何操作。

使用此操作为从图像制作的精灵节点着色。尝试测试它,看看会发生什么。

请首先阅读“Sprite Kit编程指南”!