我在场景中有一个精灵(血条),我希望每当玩家受到攻击时,它的颜色会发生变化。我可以使用greenColor和blueColor来给我的精灵上色。然而,redColor、brownColor、yellowColor、cyanColor和whiteColor似乎都不起作用。
精灵: _healthBar 代码:
精灵: _healthBar 代码:
SKAction *pulseRed = [SKAction sequence:@[
[SKAction colorizeWithColor:[SKColor redColor] colorBlendFactor:1.0 duration:0.15],
[SKAction waitForDuration:0.1],
[SKAction colorizeWithColorBlendFactor:0.0 duration:0.15]]];
SKAction *repeat = [SKAction repeatActionForever:pulseRed];
[_healthBar runAction: repeat];
输出:
[SKColor redColor] 不起作用
其他颜色:
[SKColor yellowColor] 不起作用
[SKColor blueColor] 起作用
[SKColor greenColor] 起作用
黄色似乎是有道理的,因为黄色和蓝色可以组成绿色。但我不认为这是在这里发生的事情。
有什么想法吗?
编辑:
有一种解决方法,其他人在下面已经暗示过了,对于矩形精灵(基本上在纹理上创建一个着色的精灵),这个方法非常有效。然而,我想找到一个不仅适用于矩形精灵的解决方案,因为我将使用这种策略来给我的游戏中的其他精灵上色。
着色矩形精灵的解决方案(Ahmet Cevdet):
@interface
@property (strong, nonatomic) SKSpriteNode *filterNode;
@implementation
CGSize filterSize = CGSizeMake(_healthBar.size.width, _healthBar.size.height);
SKColor *filterColor = [SKColor redColor];
_filterNode = [SKSpriteNode spriteNodeWithColor:filterColor size:filterSize];
_filterNode.alpha = 0;
[_healthBar addChild:_filterNode];
SKAction *fadeIn = [SKAction fadeAlphaTo:.6 duration:.15];
SKAction *fadeOut = [SKAction fadeAlphaTo:0 duration:.15];
SKAction *wait = [SKAction waitForDuration:0.1];
[_filterNode runAction:[SKAction repeatActionForever:[SKAction sequence:@[fadeIn,wait,fadeOut]]] withKey:@"pulseRed"];
[SKColor whiteColor]
闪烁来使其变成白色。但它实际上什么也没做。我认为它是从精灵中添加或减去特定颜色,或者类似于这样的操作。我无法准确解释,但我解决它的方法是添加一个相同大小的带有所需颜色的精灵,并将其放置在血条的顶部,然后淡入淡出 alpha 值。这是一个有点不靠谱的解决方法,但它起作用了。 - Andy Heard