精灵套件精灵没有着色

Sto*_*ton 8 colorize blending objective-c sprite sprite-kit

我正在尝试使用sprite工具包为spriteNode(在本例中为其命名的背景)着色,但无法改变颜色.我有一个我想要着色的精灵.我正在改变精灵的颜色属性以及颜色混合因子.当我运行应用程序时,没有任何反应.颜色保持不变(现在是黑色).下面是我用来改变颜色的代码:

background.anchorPoint = CGPointMake(0, .5);
background.position = position;

// ...

// this does not seems to be doing anything at all
background.color = [SKColor redColor];
background.colorBlendFactor = 1.0f;
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我仔细阅读了文档,这似乎是一个非常简单的过程.我相信我需要的只是那两条线,但它没有任何效果.有谁知道为什么这不起作用?纹理图像有很多透明度,可能导致问题吗?我在不同的精灵上试过这个,它永远不会奏效.

The*_*Art 11

像这样的东西:

    bug.color = SKColorWithRGB(128, 128, 128); 
    bug.colorBlendFactor = 1.0f;
Run Code Online (Sandbox Code Playgroud)

绝对应该选择精灵.事情是,这是非强化混合.对于这样一个简单的任务,使用带有SKEffectsNode的CIFilter非常密集.

我在下面有一个例子,它将一个精灵与一个红色调混合,使精灵变成红色,而不是原始的橙色:

    - (instancetype)init
{
    if (self = [super init]) {
        self.physicsBody.categoryBitMask = PCFireBugCategory;
        self.physicsBody.collisionBitMask = PCPlayerCategory | PCWallCategory | PCBreakableCategory | PCBoundaryCategory;
        //Keeps the bugs from sliding too far when bumped
        self.physicsBody.linearDamping = 1;
        self.physicsBody.angularDamping = 1;
        self.color = [SKColor redColor];
        self.colorBlendFactor = 0.45;
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

我还想指出这个类是SKSpriteNode的子类.

下面是一个例子,我使用上面的确切代码应用了红色调. 在此输入图像描述

Raywenderlich有一个很好的引用描述混合效果:

注意:因为色调颜色乘以原始颜色以获得最终结果,如果将精灵的颜色设置为蓝色,则最终结果不一定是蓝色 - 这取决于原始颜色.因此,如果要将精灵的颜色动态设置为特定颜色,可以方便地将精灵的源颜色设置为白色(如Zombie Conga中的猫).如果你想要你的精灵部分是不同的颜色,你也可以将你的精灵分成不同的部分,每个部分都要着色为不同的颜色.有关更多信息,请参阅raywenderlich.com上提供的Beat'Em Up游戏入门套件.